18
EJB 3.0 - Acesso Remoto Marco A. S. Reis http:// marcoreis.net

EJB 3.0 - Acesso Remoto Marco A. S. Reis

Embed Size (px)

Citation preview

Page 1: EJB 3.0 - Acesso Remoto Marco A. S. Reis

EJB 3.0 - Acesso RemotoMarco A. S. Reishttp://marcoreis.net

Page 2: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Serialização

Recurso disponível desde a primeira versão do Java, permite que se salve o estado de um objeto em uma stream de dados.

Também permite que se recupere os dados da stream de volta em um objeto.

Para trocar objetos entre JVM's diferentes, é obrigatório implementar Serializable.

É assim que o RMI trabalha, tranferindo objetos entre diferentes máquinas.

Page 3: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Interface Remota

Um session bean pode ser local ou remoto, dependendo do uso que se pretende.

Se a aplicação rodar em apenas um servidor, podemos implementar apenas as interfaces locais.

Caso o sistema seja distribuído, e há diversas justificativas para isso, as interfaces devem ser remotas e os objetos envolvidos devem obrigatoriamente ser Serializable.

Page 4: EJB 3.0 - Acesso Remoto Marco A. S. Reis

AppClient

Para acessar um componente remoto vamos criar uma aplicação cliente conforme o exemplo.

Page 5: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Library

Adicione a library do JBoss, conforme o modelo.

Page 6: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Cliente

Para acessar remotamente a aplicação cliente precisa das interfaces remotas, bem como das classes de entidades envolvidas.

Há várias formas de conseguir, uma delas é a função Export.

Page 7: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Especificação

Selecione as classes de entidade mais a fachada remota.

Indique o caminho da lib do novo projeto como destino das classes.

Page 8: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Serviços Remotos

Adicione a biblioteca recém-criada no classpath da aplicação.

Page 9: EJB 3.0 - Acesso Remoto Marco A. S. Reis

AppClient

O projeto, ao final, deve conter os arquivos ao lado.

Page 10: EJB 3.0 - Acesso Remoto Marco A. S. Reis

jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

java.naming.provider.url=jnp://192.168.1.101:1099

Page 11: EJB 3.0 - Acesso Remoto Marco A. S. Reis

JBoss

Para iniciar o JBoss é importante observar os parâmetros de bind, habilitando o servidor a receber solicitações remotas:

run.bat (.sh) -c default -b 0.0.0.0 ou

run.bat (.sh) -c default –host=0.0.0.0 ou

run.bat (.sh) -c default -Djava.bind.address=0.0.0.0

Page 12: EJB 3.0 - Acesso Remoto Marco A. S. Reis

ListaRecursosRemotos

package org.financeiro.remote;

import javax.naming.*;

public class ListaRecursosRemotos {

public static void main(String[] args) {

try {

Context ctx = new InitialContext();

NamingEnumeration<NameClassPair> lista = ctx.list("");

while (lista.hasMore()) {

NameClassPair proximo = lista.next();

System.out.println(proximo);

}

} catch (Exception e) {

}

}

}

Page 13: EJB 3.0 - Acesso Remoto Marco A. S. Reis

ConsultaCorrentistasRemotos

package org.financeiro.remote;import java.util.*;import javax.naming.*;import org.financeiro.entidades.*;import org.financeiro.negocio.*;public class ConsultaCorrentistasRemotos { public static void main(String[] args) { try { Context ctx = new InitialContext(); Object proxy = ctx.lookup("FachadaCorrentista/remote"); IFachadaCorrentistaRemote fachada = (IFachadaCorrentistaRemote) proxy; // System.out.println("Lista de correntistas"); List<Correntista> listaDeCorrentistas = fachada.consultaTodos(); for (Correntista c : listaDeCorrentistas) { System.out.println(c.getId() + " - " + c.getNome()); } } catch (Exception e) { e.printStackTrace(); } }}

Page 14: EJB 3.0 - Acesso Remoto Marco A. S. Reis

InsereCorrentistaRemoto

package org.financeiro.remote;

import java.util.*;import javax.naming.*;import javax.swing.*;import org.financeiro.entidades.*;import org.financeiro.negocio.*;

public class InsereCorrentistaRemoto { public static void main(String[] args) { try { Context ctx = new InitialContext(); Object proxy = ctx.lookup("FachadaCorrentista/remote"); IFachadaCorrentistaRemote fachada = (IFachadaCorrentistaRemote) proxy; // Correntista correntista = new Correntista(); correntista.setNome(JOptionPane.showInputDialog("Nome do Correntista")); correntista.setDataDeNascimento(new GregorianCalendar(1979, 4, 6) .getTime()); correntista.setTelefone("1234-5678"); fachada.inserir(correntista); JOptionPane.showMessageDialog(null, "Correntista inserido com sucesso"); } catch (Exception e) { e.printStackTrace(); } }}

Page 15: EJB 3.0 - Acesso Remoto Marco A. S. Reis

Monitoração

A versão 5.0 do Java trouxe uma API completa para monitoração: JMX (Java Management Extension).

Page 16: EJB 3.0 - Acesso Remoto Marco A. S. Reis

JMX Agent View

Para acessar a ferramenta de monitoração, acesse o endereço:

Http://localhost:8080/jmx-console

Page 17: EJB 3.0 - Acesso Remoto Marco A. S. Reis

EJB's instalados

Clique na opção jboss.j2ee, que irá listar todos os beans instalados no servidor.

Page 18: EJB 3.0 - Acesso Remoto Marco A. S. Reis

FachadaCorrentista

Verifique no InvokeStats as chamadas de cada método da fachada.