Autor: Zhu Xianzhong Fuente del compilador: Tianji.com
Resumen Este artículo presentará cómo realizar la interacción entre su aplicación ASP.NET y el servidor de aplicaciones J2EE y cómo hacer que llamar a EJB sea tan fácil como llamar al servicio web XML.
Introducción
Hoy en día, muchas organizaciones grandes tienen y utilizan equipos de desarrollo y servidores de publicación que son una combinación de tecnologías .NET y J2EE. Para equilibrar la calidad empresarial enviada a través del servidor de aplicaciones J2EE, la lógica empresarial de una empresa suele publicarse en el servidor de aplicaciones J2EE en forma de JavaBeans empresariales (EJB). Por otro lado, para cumplir con los requisitos siempre cambiantes del desarrollo empresarial, la mayoría de los desarrolladores prefieren implementar la lógica de descripción en el entorno de desarrollo Visual Studio.NET con un alto rendimiento de producción. El desafío surge cuando es necesario conectar la capa de presentación .NET a la capa de lógica empresarial J2EE.
Echemos un vistazo a cómo Visual MainWin para J2EE puede ayudarlo a enfrentar y superar: desde Visual Studio.NET, use C# o Visual Basic.NET para implementar la capa de descripción de ASP.NET y luego llame a la capa de lógica de negocios implementada en forma de EJB: este es un desafío para desarrollar. Tenga la seguridad de que no necesitará complicarse con la codificación API EJB para hacer esto. Con Visual MainWin para J2EE, ambas capas (el front-end de ASP.NET y el back-end de EJB) pueden ejecutarse como una aplicación J2EE pura en su servidor de aplicaciones J2EE, con optimización del rendimiento y seguridad consistente basada en J2EE.
Para llamar a EJB desde Visual Studio .NET, debe instalar la versión empresarial de Visual MainWin para J2EE. Por supuesto, puede descargar su versión de evaluación desde el sitio web mainsoft.com para realizar un análisis experimental.
Análisis de ejemplo
El ejemplo de StocksPortfolio de este artículo, que muestra cómo crear una aplicación utilizando una capa web ASP.NET y una capa empresarial J2EE, está instalado y documentado en Visual MainWin para J2EE. Este ejemplo implementa una página web ASP.NET sencilla (utilizada por los usuarios para gestionar sus inversiones en acciones) y un servicio web ASP.NET (utilizado para proporcionar cotizaciones bursátiles ficticias). Este ejemplo también utiliza una sesión EJB, utilizada por su servidor de aplicaciones J2EE para implementar la lógica de compra y venta de acciones.
Figura 1. Aplicación StocksPortfolio ejecutándose en el servidor de aplicaciones JBoss
Agregue EJB a su entorno .NET
Llamar a un EJB desde Visual Studio.NET es tan fácil como llamar a un servicio web. En su Explorador de soluciones, haga clic derecho en "Referencias" y seleccione "Agregar referencia EJB". Aparecerá un nuevo tipo de referencia que solo se puede usar en Visual MainWin para proyectos J2EE, que es muy similar a la referencia web estándar de Visual Studio. NETIDE (ver Figura 2).
Figura 2. Agregar una referencia EJB
Para agregar una referencia EJB a su proyecto Visual MainWin para J2EE, solo necesita un archivo Java (JAR), uno que implemente el EJB o contenga sus interfaces locales y remotas. Visual MainWin puede consultar el servidor de aplicaciones para obtener información sobre todos los EJB publicados en él y mostrar los EJB correspondientes a su definición JAR en un cuadro de diálogo. Sólo necesita seleccionar el EJB específico (posiblemente varios) que desea utilizar (consulte la Figura 3).
Figura 3. Cuadro de diálogo Agregar referencia de EJB
También puede consumir el EJB en un servidor de aplicaciones remoto, siempre que sea del mismo tipo que el servidor de aplicaciones local asociado con su proyecto. Podría ser un servidor Windows, Linux, Unix, Mainframe o cualquier otro servidor habilitado para J2EE. Para consumir un EJB publicado en un servidor remoto, haga clic en "Avanzado" para expandir el cuadro de diálogo (consulte la Figura 4).
Figura 4. Modo avanzado Cuadro de diálogo Agregar referencia EJB
Ingrese la URL JNDI al servidor de aplicaciones J2EE remoto y haga clic en "Obtener del servidor". Visual MainWin enumerará todos los EJB publicados en el servidor remoto y los EJB que corresponden a su archivo JAR. Esta operación es coherente con el EJB local.
Seleccione el EJB que desea consumir (puede haber varios) y haga clic en Aceptar. Se crea una nueva carpeta de referencia EJB en su navegador Explorador de soluciones, como se muestra en la Figura 5. Esta carpeta contiene una referencia basada en servidor para cada referencia EJB recién agregada, similar a un nodo de referencia web. Además, se genera una clase contenedora para simplificar la codificación de llamadas EJB. Discutiremos esta clase contenedora en una sección posterior.
Figura 5. Carpeta del Explorador de soluciones que muestra la referencia de EJB
Llamada a métodos EJB desde .NET
Cuando agrega una referencia de EJB a su proyecto, el sistema generará automáticamente una clase .NET (C# o VB.NET). Describe una interfaz simple para EJB. . Esta clase incluye la codificación J2EE necesaria para crear el EJB e invocar sus métodos. Esta clase .NET expone los métodos de la interfaz remota EJB a través de sus propios métodos públicos. Para llamar a los métodos comerciales de su EJB, simplemente cree una instancia de la clase contenedora y llame al método de clase contenedora apropiado.
A continuación se muestra un ejemplo de código para llamar a un método EJB desde su proyecto .NET:
//Cree una instancia de StockTrader EJB.
comerciante localhost.StockTraderEJB = nuevo localhost.StockTraderEJB();
//Comprar la acción definida por el usuario en el cuadro de texto del nombre de la acción,
//El número de acciones compradas corresponde al número en el cuadro de texto número de acciones
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
el análisis en profundidad
ejecuta la llamada J2EE solicitada en el constructor estático de la clase contenedora generada anteriormente para crear el objeto principal del EJB. Luego, en un constructor predeterminado, utiliza el objeto de inicio para crear el objeto EJB. El objeto EJB se almacena como un miembro de la clase contenedora a través del cual se llaman los métodos empresariales EJB.
Lo siguiente es parte del código para crear la clase contenedora de StockTrader EJB:
trading estático privado.StockTraderHome home;
comercio privado.StockTraderEJB ejbObj;
StockTraderEJB estático() {
// Crear un contexto de nombres Java (JNDI)
Contexto contexto;
contexto = vmw.j2ee.J2EEUtils.CreateContext(nulo, nulo);
objeto hogarObj;
//Obtener el objeto de inicio del servidor JNDI
homeObj = contexto.lookup("ejb/StockTrader");
inicio = ((trading.StockTraderHome)(homeObj));
}
//Constructor predeterminado: crea una nueva instancia EJB
StockTraderEJB público() {
this.ejbObj = inicio.create();
}
Esta clase contenedora expone los métodos de la interfaz remota EJB a través de sus métodos públicos. Luego, cada uno de estos métodos llama al método comercial correspondiente de su EJB a través del objeto EJB. El siguiente código muestra el método del operador de acciones en el contenedor EJB:
public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
venta nula virtual pública (cadena arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
}
Visual MainWin también es responsable de mapear tipos de datos entre Java y .NET. Por ejemplo, si uno de los métodos de su EJB recibe un objeto java.lang.calendar como parámetro, entonces llamaría a ese método con un parámetro de objeto .NET System.DateTime y lo asignaría a un java.lang en el objeto de calendario. Posteriormente, si su método EJB devuelve java.lang.class, recibirá un objeto System.Type en su lugar.
Problemas de depuración
Aunque Visual MainWin simplifica el desarrollo, es posible que aún necesite depurar sus aplicaciones ASP.NET/EJB mixtas y de varios niveles. El depurador de Visual MainWin le permite depurar sus aplicaciones híbridas desde Visual Studio .NET IDE. Puede establecer interrupciones en su código C# o VB.NET, ingresar al código Java EJB y depurar toda su aplicación a través de los límites del idioma. Y, debido a que la depuración debe estar presente dondequiera que ocurra el problema, el depurador Visual MainWin se puede conectar a su servidor de aplicaciones J2EE, independientemente de si se está ejecutando en Linux, Unix u otros marcos, siempre que pueda ejecutarse en el depurador. el patrón.
Figura 6. Uso del depurador Visual MainWin para depurar el código fuente EJB
La aplicación que Visual MainWin crea para usted es una aplicación de servlet J2EE estándar; se puede publicar y administrar a través de la Consola del administrador del servidor de aplicaciones J2EE, como cualquier otro J2EE Igual que el servlet solicitud. Por lo tanto, su capa de presentación ASP.NET y su capa de lógica empresarial EJB pueden depender de la misma infraestructura de seguridad J2EE. Sus aplicaciones híbridas ASP.NET/EJB pueden depender de un modelo de seguridad consistente mediante el uso de autenticación de servlet J2EE, y las definiciones de roles y usuarios de su servidor de aplicaciones pueden garantizar la seguridad al equilibrar los mecanismos de autorización basados en roles.
Resumen
1. Este artículo trata sobre interfaces y objetos remotos. También es posible el consumo de objetos locales a través de Visual MainWin. Para distribuir una aplicación que utiliza objetos nativos, debe crear un archivo empresarial (EAR), que contiene tanto el archivo WAR de su aplicación como el archivo JAR del EJB local.
2. Aunque Visual MainWin puede asignar la mayoría de los tipos .NET a tipos Java, no puede asignar tipos de colección, porque esta asignación puede causar una penalización en el rendimiento. Por lo tanto, puede optar por manejar los tipos de colección Java desde su código .NET o realizar dichas conversiones usted mismo.
3. Visual MainWin le permite consumir beans de sesión y beans de entidad no transaccionales. Los beans de entidad transaccionales no se pueden consumir de forma transparente, por lo que debe codificar manualmente las llamadas de transacciones J2EE. Sin embargo, en la mayoría de los casos se puede acceder a los beans de entidad transaccionales a través de beans de sesión, por lo que es poco probable que necesite hacerlo.