Autor: Zhu Xianzhong Fonte do compilador: Tianji.com
Resumo Este artigo apresentará como realizar a interação entre seu aplicativo ASP.NET e o servidor de aplicativos J2EE e como tornar a chamada de EJB tão fácil quanto chamar o serviço Web XML.
Introdução
Hoje, muitas grandes organizações possuem e utilizam equipes de desenvolvimento e servidores de publicação que são uma mistura de tecnologias .NET e J2EE. Para equilibrar a qualidade empresarial enviada através do servidor de aplicativos J2EE, a lógica de negócios de uma empresa é frequentemente publicada no servidor de aplicativos J2EE na forma de Enterprise JavaBeans (EJB). Por outro lado, para atender aos requisitos em constante mudança do desenvolvimento de negócios, a maioria dos desenvolvedores prefere implementar a lógica de descrição no ambiente de desenvolvimento do Visual Studio.NET com alto desempenho de produção. O desafio surge quando você precisa conectar a camada de apresentação .NET à camada lógica de negócios J2EE.
Vamos dar uma olhada em como o Visual MainWin para J2EE pode ajudá-lo a enfrentar e superar - no Visual Studio.NET, use C# ou Visual Basic.NET para implementar a camada de descrição do ASP.NET e, em seguida, chame a camada de lógica de negócios implementada na forma de EJB - este é um desafio para desenvolver. Fique tranquilo, você não precisará mexer na codificação da API EJB para fazer isso. Com o Visual MainWin para J2EE, ambas as camadas - o front-end ASP.NET e o back-end EJB - podem ser executadas como um aplicativo J2EE puro em seu servidor de aplicativos J2EE, com otimização de desempenho e segurança consistente baseada em J2EE.
Para chamar EJBs do Visual Studio .NET, você deve instalar a versão corporativa do Visual MainWin para J2EE. Claro, você pode baixar sua versão de avaliação no site mainsoft.com para análise experimental.
Análise de Exemplo
O exemplo StocksPortfolio deste artigo - que mostra como criar um aplicativo usando uma camada Web ASP.NET e uma camada de negócios J2EE - está instalado e documentado no Visual MainWin para J2EE. Este exemplo implementa uma página da Web ASP.NET simples - usada pelos usuários para gerenciar seus investimentos em ações - e um serviço da Web ASP.NET - usado para fornecer cotações de ações fictícias. Este exemplo também usa uma sessão EJB - usada pelo seu servidor de aplicação J2EE para implementar a lógica de compra e venda de ações.
Figura 1. Aplicativo StocksPortfolio em execução no servidor de aplicativos JBoss
Adicione EJBs ao seu ambiente .NET
Chamar um EJB do Visual Studio.NET é tão fácil quanto chamar um serviço da Web. No Solution Explorer, clique com o botão direito em "Referências" e selecione "Adicionar Referência EJB". Um novo tipo de referência aparecerá que só pode ser usado no Visual MainWin para projetos J2EE, que é muito semelhante à referência da Web padrão do Visual Studio. NETIDE (ver Figura 2).
Figura 2. Incluindo uma referência EJB
Para incluir uma referência EJB em seu projeto Visual MainWin for J2EE, você só precisa de um arquivo Java archive (JAR) - um que implemente o EJB ou contenha suas interfaces locais e remotas. O Visual MainWin pode consultar o servidor de aplicativos para obter informações sobre todos os EJBs publicados nele e exibir os EJBs correspondentes à sua definição JAR em uma caixa de diálogo. Você só precisa selecionar o EJB específico (possivelmente vários) que deseja usar (veja a Figura 3).
Figura 3. Caixa de diálogo Adicionar Referência EJB
Você também pode consumir o EJB em um servidor de aplicativos remoto, desde que seja do mesmo tipo que o servidor de aplicativos local associado ao seu projeto. Pode ser um servidor Windows, Linux, Unix, Mainframe ou qualquer outro servidor habilitado para J2EE. Para consumir um EJB publicado em um servidor remoto, clique em “Avançado” para expandir a caixa de diálogo (veja a Figura 4).
Figura 4. Caixa de diálogo Adicionar referência EJB no modo avançado
Insira a URL JNDI para o servidor de aplicativos J2EE remoto e clique em "Buscar do servidor". O Visual MainWin listará todos os EJBs publicados no servidor remoto e os EJBs que correspondem ao seu arquivo JAR. Esta operação é consistente com o EJB local.
Selecione o EJB que deseja consumir (podem ser vários) e clique em OK. Uma nova pasta de referência EJB é criada no navegador Solution Explorer, conforme mostrado na Figura 5. Esta pasta contém uma referência baseada em servidor para cada referência EJB recém-incluída, semelhante a um nó de referência da Web. Além disso, uma classe wrapper é gerada para simplificar a codificação da chamada EJB. Discutiremos essa classe wrapper em uma seção posterior.
Figura 5. Pasta Solution Explorer mostrando referência EJB
Chamando métodos EJB a partir de .NET
Quando você adiciona uma referência EJB ao seu projeto, o sistema gerará automaticamente uma classe .NET (C# ou VB.NET). Ela descreve uma interface simples para o EJB. . Esta classe inclui a codificação J2EE necessária para criar o EJB e invocar seus métodos. Esta classe .NET expõe os métodos da interface remota EJB através de seus próprios métodos públicos. Para chamar os métodos de negócios do seu EJB, basta criar uma instância da classe wrapper e chamar o método da classe wrapper apropriado.
Aqui está um exemplo de código para chamar um método EJB do seu projeto .NET:
//Crie uma instância do EJB StockTrader.
comerciante localhost.StockTraderEJB = novo localhost.StockTraderEJB();
//Compre a ação definida pelo usuário na caixa de texto do nome da ação,
//O número de ações adquiridas corresponde ao número na caixa de texto do número de ações
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
A análise aprofundada
executa a chamada J2EE solicitada no construtor estático da classe wrapper gerada acima para criar o objeto inicial do EJB. Então, em um construtor padrão, ele usa o objeto home para criar o objeto EJB. O objeto EJB é armazenado como um membro da classe wrapper por meio do qual os métodos EJB de negócios são chamados.
A seguir está parte do código para criar a classe wrapper do EJB StockTrader:
private static trading.StockTraderHome home;
negociação privada.StockTraderEJB ejbObj;
StockTraderEJB estático() {
// Cria um contexto de nomeação Java (JNDI)
Contexto contextual;
contexto = vmw.j2ee.J2EEUtils.CreateContext(null, null);
objeto homeObj;
//Obtém o objeto home do servidor JNDI
homeObj = context.lookup("ejb/StockTrader");
home = ((trading.StockTraderHome)(homeObj));
}
//Construtor padrão: Cria uma nova instância EJB
public StockTraderEJB() {
this.ejbObj = home.create();
}
Esta classe wrapper expõe os métodos da interface remota EJB através de seus métodos públicos. Cada um desses métodos chama o método de negócios correspondente do seu EJB por meio do objeto EJB. O código a seguir mostra o método do corretor de ações no wrapper 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 também é responsável por mapear tipos de dados entre Java e .NET. Por exemplo, se um dos métodos do seu EJB receber um objeto java.lang.calendar como parâmetro, você chamaria esse método com um parâmetro de objeto .NET System.DateTime e mapeá-lo-ia para um java.lang no objeto calendário. Posteriormente, se o seu método EJB retornar um java.lang.class, você receberá um objeto System.Type.
Problemas de depuração
Embora o Visual MainWin simplifique o desenvolvimento, talvez você ainda precise depurar seus aplicativos ASP.NET/EJB mistos e de vários níveis. O depurador Visual MainWin permite depurar seus aplicativos híbridos de dentro do IDE do Visual Studio .NET. Você pode definir interrupções em seu código C# ou VB.NET, entrar no código EJB Java e depurar todo o seu aplicativo além dos limites da linguagem. E, como a depuração precisa estar presente onde quer que o problema ocorra, o depurador Visual MainWin pode ser conectado ao seu servidor de aplicativos J2EE, independentemente de estar sendo executado em Linux, Unix ou outras estruturas, desde que possa ser executado no depurador. o padrão.
Figura 6. Usando o depurador Visual MainWin para depurar o código-fonte EJB
O aplicativo que o Visual MainWin cria para você é um aplicativo servlet J2EE padrão - ele pode ser publicado e gerenciado por meio do J2EE Application Server Manager Console, assim como qualquer outro J2EE O mesmo que o servlet aplicativo. Portanto, sua camada de apresentação ASP.NET e sua camada de lógica de negócios EJB podem contar com a mesma infraestrutura de segurança J2EE. Seus aplicativos ASP.NET/EJB híbridos podem contar com um modelo de segurança consistente por meio do uso de autenticação de servlet J2EE, e as definições de usuário e função do servidor de aplicativos podem garantir a segurança equilibrando mecanismos de autorização baseados em funções.
Resumo
1. Este artigo discutiu objetos e interfaces remotos. O consumo local de objetos via Visual MainWin também é possível. Para distribuir um aplicativo que usa objetos nativos, você deve criar um arquivo EAR (enterprise archive) - que contém o arquivo WAR do seu aplicativo e o arquivo JAR do EJB local.
2. Embora o Visual MainWin possa mapear a maioria dos tipos .NET para tipos Java, ele não pode mapear tipos de coleção - porque esse mapeamento pode causar uma penalidade no desempenho. Portanto, você pode optar por manipular os tipos de coleção Java a partir do seu código .NET ou realizar essas conversões você mesmo.
3. Visual MainWin permite consumir beans de sessão e beans de entidade não transacionais. Os beans de entidade transacionais não podem ser consumidos de forma transparente, portanto, você deve codificar manualmente as chamadas de transação J2EE. Entretanto, na maioria dos casos, beans de entidade transacionais podem ser acessados através de beans de sessão, portanto é improvável que você precise fazer isso.