EJB Tutorial - Parte 4
Autor: Sandro Rogério | Publicado: 2008-01-04T15:13:00-02:00

Criando um Client para o nosso Stateless SessionBeanAgora, com o nosso componente rodando no servidor, precisamos testa-lo e acessa-lo. Vamos agora escrever um cliente que possa acessar o componente e seus métodos de negócio. O nosso cliente precisará conectar-se ao serviço de nomes (JNDI) e encontrar o nosso componente.Para usarmos uma abordagem mais de acordo com o que acontece no mundo real durante o desenvolviemnto de um sistema, vamos criar um “ServiceLocator”.ServiceLocator é uma pattern que nos poupa o trabalho de pegar o InitialContext toda vez que quisermos uma interface para um objeto de negócio. Imagine que toda vez que você for acessar um componente EJB você faça assim:      try {          Hashtable t = new Hashtable();                         t.put(Context.INITIAL_CONTEXT_FACTORY,                                      "org.jnp.interfaces.NamingContextFactory");                         t.put(Context.PROVIDER_URL, "localhost");                         t.put (Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");                          initialContext = new InitialContext(t);UsuarioService usuarioService =                                   (UsuarioService) initialContext.lookup(UsuarioService.class.getName());            } catch (Exception exc)   {                   exc.printStackTrace();             }        }É evidente que isso faria o nosso código ficar demasiadamente grande. Por isso concentramos o processo de “procurar” o objeto no serviço de nomes em um Singleton, que fará esse trabalho para nós.Crie uma classe chamada “ServiceLocator, dentro do pacote “com.service”. Aqui o nosso ServiceLocator:package com.service;import java.util.HashMap;import java.util.Hashtable;import javax.ejb.EJBHome;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;public class ServiceLocator {private HashMap homes = new HashMap();private static ServiceLocator locator;private InitialContext initialContext;private ServiceLocator() {try {Hashtable t = new Hashtable();t.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");t.put(Context.PROVIDER_URL, "localhost");t.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");initialContext = new InitialContext(t);} catch (Exception exc) {exc.printStackTrace();}}public static ServiceLocator getInstance() {if (locator == null) {locator = new ServiceLocator();}return locator;}protected Object clone() throws CloneNotSupportedException {throw new CloneNotSupportedException("Nao e possivel clonar o ServiceLocator!");}public Object get(String jndiName) throws Exception {try {Object result = null;result = initialContext.lookup(jndiName);if(result==null) {if (result==null) {throw new NamingException();}}return result;} catch (NamingException e) {e.printStackTrace();}return null;}}Agora vamos criar uma classe teste, para acessar o nosso objeto, crie um pacote chamado “com.testes” e nele uma classe chamada “TestUsuario”:package com.testes;import com.service.ServiceLocator;import com.service.UsuarioService;public class TestUsuario {public static void main (String...args){try{UsuarioService usuario = (UsuarioService)ServiceLocator.getInstance().get(UsuarioService.class.getName());System.out.println(usuario.getMessage());}catch (Exception e){e.printStackTrace();}}}Vamos precisar adicionar ao build path do nosso projeto 2 arquivos jars, localizados no diretorio de instalação do JBoss:jboss/client/jbossall-client.jarjboss/server/default/deploy/jboss-aop.deployer/jboss-aspect-library-jdk50.jarFeito isso, podemos executar nossa classe de teste e veremos a mensagem contida na implementação do método do nosso componente.