Oi Luiz,
Desculpe a demora, mas e que estou fazendo um curso e o tempo para
dar vazao nos e-mails esta bastante curto.
Bom, com relacao ao RMI no Netscape nao testei ainda, portanto nao
tenho nada a acrescentar nesta questao.
Agora vamos ao exemplo que voce solicitou:
Sugiro voce faca uma consulta Tutorial,
http://java.sun.com/docs/books/tutorial/rmi/index.html
Existe um exemplo interessante la e foi baseado nele que fiz
minha implementacao.
Como ja havia dito antes, com RMI a conversa entre as camadas
se reduz a uma simples chamada de metodo de um objeto .
.
Tentei colocar no exemplo apenas as linhas chaves do processo :
1) Codigo a ser colocado na Applet:
import java.rmi.*;
public class FrameInvSistemas extends JApplet {
ObjPessoaInterface objPessoa;
....
// Este trecho obtem uma referencia para um Objeto remoto cujos metodos
// podem ser acesados como se fosse um obj criado localmente.
try {
objPessoa = (ObjPessoaInterface) Naming.lookup("//jupi/Pessoa");
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
// Este objeto remoto possui metodo chamado obtemNomesDependentes( String
matricula );
String mat = new String("R12345");
Vector dependentes = objPessoa.obtemNomesDependentes( mat );
System.out.println(dependentes);
}
2) Codigo da Interface ObjPessoaInterface:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ObjPessoaInterface
extends java.rmi.Remote {
// Metodos de Consulta
public Vector obtemNomesDependentes( String matricula ) throws RemoteException;
}
3) Codigo do Objeto da Camada de Negocio:
------------------------------------------------------------
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
import java.io.*;
import java.sql.*;
public class Pessoa
extends UnicastRemoteObject
implements ObjPessoaInterface{
public Passoa( String s ) throws RemoteException {
super();
nomeServidor = s;
try {
// Conecta ao banco via JDBC/Thin
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver ());
System.out.println("Registrei Driver JDBC - Oracle Thin" );
con = DriverManager.getConnection (
urlJDBC, "R20972", "GUSTAVO");
con.setAutoCommit(false);
}catch (SQLException ex) {
procPadraoSqlException( ex );
}catch (java.lang.Exception ex) {
// trata alguma outra exception.
ex.printStackTrace ();
}
}
public static void main( String[] args ){
// carrega Security manager
System.setSecurityManager( new RMISecurityManager());
try {
Passoa obj = new Pessoa( "Pessoa Server" );
System.out.println("Instanciei Pessoa");
Naming.rebind("//jupi/Pessoa", obj );
System.out.println("PessoaServer bound in registry" );
}catch ( Exception e ){
System.out.println("InvSistemasServer err: " + e.getMessage()
+ " Nome da Classe===> " + e.getClass());
e.printStackTrace();
}
}
public Vector obtemNomesDependentes( String matricula ){
Vector depndentes = new Vector(0,10);
Statement stmt = null;
ResultSet rs = null;
try{
stmt = con.createStatement();
rs = stmt.executeQuery( Select deps.nome from pessoa pes , dependentes deps
where pes.matricula = " + matricula );
while (rs.next()){
dependentes.addElement( new String( rs.getString(1) ) );
}
rs.close();
stmt.close();
}catch (SQLException ex) {
procPadraoSqlException( ex, selectBibliotecas );
}catch ( Exception e ){
System.err.println("InvSistemasServer exception: " + e.getMessage());
e.printStackTrace();
}
return dependentesv;
}
Antes de montar este exemplo sugiro que voce coloque para funcionar o exemplo
do tutorial antes, la estao as dicas de como compilar e colocar em producao uma
app RMI.
Atenciosamente,
Helio
----- Mensagem original -----
De: LUIZ CARLOS FILIPPI JUNIOR [SMTP:[EMAIL PROTECTED]]
Enviada em: Terca-feira, 25 de Janeiro de 2000 10:12
Para: 'Helio Rugani Brandao'
Cc: [EMAIL PROTECTED]
Assunto: RES: RE: [SouJava-J] Applet no Netscape X Internet Explorer
Legal Helio,
Obrigado pea atencao !
Pois e, e mesmo um saco a preocupacao com a passagem dos "bagulhos" entre as
camadas.
Voce poderia me mandar um "pedaco" so servidor "objeto de negocio" e do
client "Applet ou App" ?
Gostaria de testar isso ?
Voce sabe se no Netscape o RMI funciona ?
[]?s
Junior
> ----- Mensagem original -----
> De: Helio Rugani Brandao [SMTP:[EMAIL PROTECTED]]
> Enviada em: Terca-feira, 25 de Janeiro de 2000 10:18
> Para: 'LUIZ CARLOS FILIPPI JUNIOR'
> Assunto: RES: RE: [SouJava-J] Applet no Netscape X Internet
> Explorer
>
> Luiz,
>
> No meu projeto implrmentei iniciamente comunicacao via Socket.
> Examente como voce sugeriu para a Luciana.
>
> A comunicacao funcionou mas percebia que para grandes projetos eu
> precisava
> de uma abordagem de nivel mais elevado para a comunicacao entre a
> camada
> visual ( Applet ou mesmo uma AppJava ) e a camada central que costumo
> chamar de
> camada de objetos de negocio. Usando Sockets a passagem de dados ocorre
> via
> streams ( de bytes, caracteres, ou mesmo de objetos serializados ) e
> voce absorve toda
> responsabilidade de codificar estas "baixarias" que normalmente nao
> teem nada
> a ver com o problema a ser resolvido e portanto dispersam sua atencao
> em relacao
> a essencia do problema a ser resolvido pelo sistema.
>
> Aprofundando mais meus conhecimentos, verifiquei que o Java ( como
> sempre )
> ja tinha uma solucao para o este problema. O RMI me oferecia exatamente
> o que eu
> precisava. Em vez de Streams era possivel passar objetos inteiros de uma
> camada
> para outra. Na realidade tudo acontece e via Sockets mesmo mas o RMI me
> abstraia
> de toda aquela "baixaria" descrita acima e usando uma sintaxe limpa. Com
> RMI
> toda a comunicacao entre as camadas reduziu-se a uma simples chamada
> de metodo passando seus respectivos parametros e recebendo o devido
> retorno.
>
> Com RMI praticamente pode-se instanciar um objeto em outra maquina e
> trata-lo
> como se fosse um objeto local de sua aplicacao.
>
> Quanto ao problema com os browsers. Aqui o browser padrao da empresa e
> o Internet Explorer da Microsoft, que omitia as classes de suporte a
> RMI
> de sua maquina virtual. Via lista de discussao acabei descobrindo que a
>
> Microsoft disponibilizava para Download as classes RMI que deveriam ser
> colocadas
> num deteminado diretorio de sistema para que as coisas funcionassem.
> Nao cheguei a testar esta opcao, pois ja havia solucionado o problema
> via
> Plug-in Java. Eu precisava usar objetos Swing na applet tambem e so
> o Plug-in me oferecia solucao para os dois problemas.
>
>
> Abracos
>
> Helio
>
>
> ----- Mensagem original -----
> De: LUIZ CARLOS FILIPPI JUNIOR [SMTP:[EMAIL PROTECTED]]
> Enviada em: Segunda-feira, 24 de Janeiro de 2000 14:27
> Para: '[EMAIL PROTECTED]'; 'Helio Rugani Brandao'
> Assunto: RES: RE: [SouJava-J] Applet no Netscape X Internet
> Explorer
>
> Helio,
>
> Como ja sugeri a Luciana, eu criei um "Servidor SQL", que so faz
> acesso
> ao Oracle e devolve o resultado
> ao Applet ou Aplicacao Cliente que solicita, e devolve isso via Socket,
> pois
> algumas versoes de Browser, tinham
> problemas em suportar RMI. Voce passou por isso ? Que browsers voce usa ?
> Qual seria a melhor alternativa para este caso ? Socket ou RMI ?
>
> Oque os nossos JAmigos acham ???
>
>
>
> []?s
> > ----- Mensagem original -----
> > De: Helio Rugani Brandao [SMTP:[EMAIL PROTECTED]]
> > Enviada em: Segunda-feira, 24 de Janeiro de 2000 10:28
> > Para: '[EMAIL PROTECTED]'
> > Assunto: RES: RE: [SouJava-J] Applet no Netscape X Internet
> > Explorer
> >
> > Luciana,
> >
> > O acesso a banco de dados via applet, por questao de seguranca
> > esta sugeito a uma serie de restricoes que podem ser contornadas
> > via signed applets e alteracoes no arquivo javapolicy do JRE
> > das maquinas clientes.
> >
> > Caminhar na direcao acima citada pode ser uma saida,
> > mas eu sugiro que voce nao faca acesso a BD diretamente da applet.
> > De certo modo voce sempre se deparara com problemas de seguranca
> > alem de onerar demais o sistema pois cada applet se transformara
> > em uma ou mais conexoes com o BD.
> >
> > Aqui fiz uma pequena aplicacao que funciona tanto stand alone como
> > dentro de browser acessando o Oracle 7.
> >
> > Coloquei na applet apenas a logica da camada visual e esta applet
> > conecta-se via RMI com uma outra app java ( esta sim devidamente
> > conectada ao Banco e sem nenhuma restricao pois nao esta submissa
> > as restricoes do security manager da JVM dos browsers ) que busca
> > os dados solicitados e os envia para o applet popular os devidos
> > componetes visuais com seus respectivos conteudos.
> > Tal procedimento alivia o banco pois apenas esta app java central
> > conecta-se ao banco e pode compartillar esta conexao ( ou seu
> > pool de conexoes ) com todos os applets clientes.
> >
> > Esta abordagem tambem possui o beneficio de deixar as applets
> > menores aliviando seu download e se voce lancar mao de
> > apenas componentes visuais padroes da Maquina Vitual utilizada
> > elas ficam ainda menores porque praticamente 99 %
> > das classes visuais ja estariam presentes na maquina local e nao
> > precisariam ser baixadas.
> >
> > Abracos,
> >
> > Helio
> >
> >
> >
> >
> >
> >
> > ----- Mensagem original -----
> > De: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]]
> > Enviada em: Segunda-feira, 24 de Janeiro de 2000 9:22
> > Para: [EMAIL PROTECTED]
> > Assunto: Re: RE: [SouJava-J] Applet no Netscape X Internet
> > Explorer
> >
> > Caros amigos,
> >
> > Acredito que o JAVA perde muito em
> > credibilidade frente a comunidade de
> > desenvolvedores por problemas como estes
> > relatados por voces.
> > Quem ja nao passou horas tentando
> > debugar(applet)
> > um problema, e quando apenas mudou de
> > visualizado(Netscape para I.E, ou
> > vice-versa) tudo comecou a funcionar?
> > Tenho uma applet ao qual gostaria de usar
> > o LayoutManager CardLayout, quando uso o
> > I.E funciona legal, mas quando uso o
> > netscape simplesmente nao funciona.
> >
> > Quando cheguei nesse ponto, pensei em
> > simplesmente usar o I.E, mas ai neste
> > Browse o meu procedimento de acesso a dados
> > simplesmente nao funciona(diz que nao
> > tenho acesso a classe
> > sun.jdbc.odbc.JdbcOdbcDriver)?
> >
> > Alguem ja teve esse problema???
> >
> > Atenciosamente,
> > Luciana Paiva
> >
> > OBS. Estou tentando acessar uma base em
> > DB2
> >
> > --------------------------- LISTA SOUJAVA
> ---------------------------
> > http://www.soujava.org.br - Sociedade de Usuarios Java da
> Sucesu-SP
> > [para sair da lista:
> http://www.soujava.org.br/forum/cadastrados.htm]
> >
> ---------------------------------------------------------------------
> >
> > --------------------------- LISTA SOUJAVA
> ---------------------------
> > http://www.soujava.org.br - Sociedade de Usuarios Java da
> Sucesu-SP
> > [para sair da lista:
> http://www.soujava.org.br/forum/cadastrados.htm]
> >
> --------------------------------------------------------------------- <<
> Arquivo: ATT00000.htm >> << Arquivo: ATT00006.htm >>
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------