Cliente de EJB do JBoss EAP 6.1

Direto ao assunto, para criar um cliente de EJB, primeiramente precisa-se de em EJB rodando no servidor JBoss.

Neste post utilizei os seguintes programas rodando no windows7.
– JDK 1.7
– Eclipse: Juno
– jboss-eap-6.1.0



Instalação JBoss 6.1

A instalação não é objetivo deste post, mas como existem alguns detalhes…
Para instalar o JBoss acesse o site do produto (http://www.jboss.org/products) e faça o download e a descompactação na pasta c:\jboss-eap-6.1 (sugestão).
O arquivo “C:\jboss-eap-6.1\bin\standalone.bat” serve para iniciar o servidor.
Se ocorrer a mensagem “JAVA_HOME não configurada” você deve editar o arquivo “C:\jboss-eap-6.1\bin\standalone.conf.bat” conforme sugerido:

Descomente a linha com o seguinte conteúdo: 
     rem set "JAVA_HOME=C:\opt\jdk1.6.0_23"
e ajuste o conteúdo da variável JAVA_HOME para a instalação da JDK. No meu caso ficou assim:
     set "JAVA_HOME=C:\jdk1.7.0_10"  

Para ajustar a memória do servidor, altere a linha com o seguinte conteúdo:
     set "JAVA_OPTS=-Xms1303M -Xmx1303M -XX:MaxPermSize=256M"
está configurada para usar muita memoria, inicialmente eu uso desta forma:
     set "JAVA_OPTS=-Xms32M -Xmx256M -XX:MaxPermSize=64M" 

Agora sim, ao executar o script “C:\jboss-eap-6.1\bin\standalone.bat” o servidor deve ser iniciado com sucesso.

O JBoss também possui uma interface web que pode ser acessada localmente pelo endereço http://127.0.0.1:8080/
Para o primeiro acesso é necessário configurar um usuário e senha. Para fazer isso execute o script “C:\jboss-eap-6.1\bin\add-user.bat”

jboss-add-user

Escolha a opção “a” e deixe o Realm (ManagementRealm) da forma que aparece na tela, apenas aperte e complete as informações de logon e senha.
Mesmo que o script para adicionar usuário apresente a mensagem “JAVA_HOME não setada” não tem problemas, é só um aviso e pode ser ignorado. No exemplo, adicioneio o usuario: “admin” com a senha: “admin#123”.

Finalizado a instalação do JBoss, agora é hora de fazer deploy de um EJB para depois criar o cliente deste EJB.



Criando o projeto EJB no Eclipse

No eclipse, crie um projeto java conforme a figura:

imagem que mostra o projeto no eclipse do EJB

Adicione uma referência (build path) para o JAR que está em “C:\jboss-eap-6.1\modules\system\layers\base\javax\ejb\api\main”

Esse é o conteúdo das classes:

Arquivo: EjbHoraCerta.java

  package br.teste;
  import javax.ejb.Remote;
  @Remote
  public interface EjbHoraCerta {  
    public String dataHora();     
  } 

Arquivo: EjbHoraCertaImpl.java

  package br.teste;
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import javax.ejb.Stateless;
  @Stateless
  public class EjbHoraCertaImpl implements EjbHoraCerta{ 	
      SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
      public String dataHora() {			
         return df.format(Calendar.getInstance().getTime());
      }
  }

Agora falta empacotar tudo em um arquivo jar e fazer o deploy no JBoss.

Para empacotar em um arquivo JAR faça o seguinte:
Escolha o menu “File/Export/Java/Jar File” e indique onde deve ser salvo o arquivo.

O nome do arquivo JAR é importante para o JBoss. Neste exemplo, usei o nome “ejb-hora-certa.jar”
Para fazer deploy copie o arquivo “ejb-hora-certa.jar” para a pasta “C:\jboss-eap-6.1\standalone\deployments”
Se tudo ocorre conforme planejado, veremos no console algo parecido com o seguinte:

   Iniciando a implantação do "ejb-hora-certa.jar"
   deployment "ejb-hora-certa.jar" are as follows:

   java:global/ejb-hora-certa/EjbHoraCertaImpl!br.teste.EjbHoraCerta
   java:app/ejb-hora-certa/EjbHoraCertaImpl!br.teste.EjbHoraCerta
   java:module/EjbHoraCertaImpl!br.teste.EjbHoraCerta
   java:jboss/exported/ejb-hora-certa/EjbHoraCertaImpl!br.teste.EjbHoraCerta
  
   java:global/ejb-hora-certa/EjbHoraCertaImpl
   java:app/ejb-hora-certa/EjbHoraCertaImpl
   java:module/EjbHoraCertaImpl

   INFO  [org.jboss.as.server] Implantado "ejb-hora-certa.jar"


Criando o cliente do EJB

O cliente é parte mais simples. Apenas criamos uma classe com o método main, conforme o exemplo:

public class Teste {
   public static void main(String[] args) throws NamingException {
     Hashtable ht = new Hashtable();
     ht.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.remote.client.InitialContextFactory");
     ht.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
     ht.put(Context.PROVIDER_URL, "remote://127.0.0.1:4447");				

     ht.put("jboss.naming.client.ejb.context","true");
						
     Context context = new InitialContext(ht);
     EjbHoraCerta remoteEJB = (EjbHoraCerta) context.lookup("/ejb-hora-certa/EjbHoraCertaImpl!br.teste.EjbHoraCerta");
	
     //mostra resultado da chamada do EJB remoto
     System.out.println("Hora certa do servidor -> "+ remoteEJB.dataHora());			
   } 
}

Para executar o programa cliente deve ser adicionado uma referência ao aquivo “jboss-cliente.jar”, da pasta “C:\jboss-eap-6.1\bin\client”
Se tudo der certo, na console do Eclipse aparece algo do tipo:

INFO: JBoss EJB Client version 1.0.21.Final-redhat-1
Hora certa do servidor -> 05/06/2013 19:24:22

Na versão 6.0 do JBoss, era mais complicado a questão de dependências para rodar o cliente de EJB. Quando não configurado corretamente aparece mensagems como “No EJB receiver available for handling [appName:, moduleName:ejb-hora-certa, distinctName:”.
Se você quer reproduzir os exemplos deste Post, recomendo usar a versão JBOss-eap-6.1.0

Para saber mais:
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
http://www.slideshare.net/adrianots/sistemas-distribudos-comunicao-distribuda-ejb-jboss-7

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s