3.2.10.2. Invocação Remota de um Bean de Sessão usando JNDI
ejb-remote contém os projetos Maven operantes que demostram essa funcionalidade. Esta seção contém projetos para ambos os beans de sessão para implantação e o cliente remoto. As amostras de código abaixo foram tiradas do projeto de cliente remoto.
Atenção
Pré-requisitos
- Você já deve possuir um projeto Maven criado e pronto para ser usado.
- A configuração para o repositório Maven do JBoss EAP 6 já foi adicionada.
- Os beans de sessão que você deseja invocar já estão implantados.
- Os beans de sessão implantados implementam as interfaces comerciais remotas.
- As interfaces comerciais remotas dos beans de sessão estão disponíveis como uma dependência Maven. Caso as interfaces comerciais remotas estejam disponíveis apenas como um arquivo JAR, recomenda-se a adição do JAR ao seu repositório Maven como um artefato. Consulte a documentação Maven para orientações
install:install-filesobre as direções, http://maven.apache.org/plugins/maven-install-plugin/usage.html - Você precisa saber o nome do host e a porta JNDI do servidor hospedando os beans de sessão.
Procedimento 3.22. Adição da Configuração do Projeto Maven para Invocação Remota dos Beans de Sessão
Adicione as dependências do projeto necessárias
Opom.xmlpara o projeto deve ser atualizado para incluir as dependências necessárias.Adicione o arquivo
jboss-ejb-client.propertiesA API do cliente EJB JBoss espera encontrar um arquivo na raiz do projeto nomeadojboss-ejb-client.propertiesque contenha a informação da conexão para o serviço JNDI. Adicione este arquivo ao diretóriosrc/main/resources/do seu projeto com o seguinte conteúdo.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Altere a porta e o nome do host para coincidir com o seu servidor.4447é o número de porta padrão. Para uma conexão segura, configure a linhaSSL_ENABLEDcomotruee remova os comentários da linhaSSL_STARTTLS. A interface remota no contêiner suporta as conexões seguras e não seguras usando a mesma porta.Adicione dependências para as interfaces comerciais remotas
Adicione as dependências Maven aopom.xmlpara as interfaces comerciais remotas dos beans de sessão.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 3.23. Obtenção de um Proxy Bean usando JNDI e Invocação de Métodos do Bean
Maneje as exceções verificadas
Dois dos métodos usados nos códigos a seguir (InitialContext()elookup()) possuem uma exceção verificada do tipojavax.naming.NamingException. Essas chamadas de método devem estar inseridas em um bloco de tentativa/captura que captureNamingExceptionou em um método que seja declarado para lançarNamingException. O início rápidoejb-remoteutiliza a segunda técnica.Crie um Contexto JNDI
Um objeto do Contexto JNDI fornece o mecanismo para solicitar recursos do servidor. Crie um contexto JNDI usando o seguinte código:final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);
final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);Copy to Clipboard Copied! Toggle word wrap Toggle overflow As propriedades de conexão para o serviço JNDI são lidas a partir do arquivojboss-ejb-client.properties.Use o método lookup() do Contexto JNDI para obter um proxy bean
Invoque o métodolookup()do proxy bean e passe-o o nome JNDI do bean de sessão que você necessita. Isto retornará um objeto que deve ser convertido para o tipo da interface comercial remota que contém os métodos que você deseja invocar.final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());Copy to Clipboard Copied! Toggle word wrap Toggle overflow Os nomes JNDI de bean de sessão são definidos usando uma sintaxe especial. Consulte Seção 3.2.10.3, “Referência de Nomeação JNDI EJB ” para mais informações.Invocação de Métodos
Agora que você possui um objeto bean proxy, você pode invocar qualquer um dos métodos contidos na interface comercial remota.int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);Copy to Clipboard Copied! Toggle word wrap Toggle overflow O bean proxy passa a solicitação de invocação do método para o bean de sessão no servidor, onde é executado. O resultado é retornado ao bean proxy que, então, o retorna ao chamador. A comunicação entre o bean proxy e o bean de sessão remoto é transparente ao chamador.