O tal do .narrow

3 respostas
chun

Alguem sabe a real funcao do .narrow na hora de recuperar a interface home remota ? prq tipo… funciona tanto com ele tanto sem ele…

Qual a real utilidade dele ? li no manual q ele “apenas garante que um tipo pode ser convertuido em outro” , poxa… mas se nao puder ser convertido ele dah um Exception… e se vc tirar o narrow e chamar direto tmb da exception…

Logo… seria a mesma coisa q dar um select antes pra ver se o registro existe e depois dar um delete… DAH NA MESMA dar o delete direto… e pouca uma chamada ao banco… ( mantendo as devidas proporcoes eh claro )

Alguem sabe me explicar o prq devo usar essa coisa ?

3 Respostas

O

Olá, .narrow serve basicamente para “estreitar” um objeto, pois quando se trabalha com objetos remotos vc não consegue fazer Casting diretamente, por isso existe esta função.

abraços.

chun

Nao entendi bem o que vc disse com “estreitar” , e prq funciona se vc nao fizer narrow ?

oandrade:
Olá, .narrow serve basicamente para “estreitar” um objeto, pois quando se trabalha com objetos remotos vc não consegue fazer Casting diretamente, por isso existe esta função.

abraços.

O

Olá novamente,

Seguinte, A especificação diz para vc sempre utilizar o Narrow, pode ser que funcione sem, mas seu codigo não seria independente do vendor, principalmente quando utilizamos o JBoss(3.xxx) e ainda mais se a flag para verificar compatibilidade com especificação(strict verifier) etiver desligada.

A Interface Remota e a HOME implementam java.rmi.Remote. Portanto as chamadas para esta interface serão remotas, e como a maioria dos containers utilizam IIOP como protocolo de comunicação, temos que utilizar o narrow para conseguir fazer o Casting.

Se não me engano na versão 1.1 do EJB vc era obrigado a sempre utilizar o narrow para fazer o casting, na 2.0 não, porém vai depender do container que estiver utilizando.

Segue abaixo um exemplo:

try {
      System.out.println("Clique");
      Context context=ServiceLocator.getInitialContext();
      Object objref = context.lookup("java:/AnoBissexto");
      AnoBissexto ab = null;
      AnoBissextoHome anoHome = null;
      objref =  (AnoBissextoHome)PortableRemoteObject.narrow(objref, AnoBissextoHome.class);
      if (objref instanceof AnoBissextoHome) {
        anoHome = (AnoBissextoHome)objref;
      } else {
        txtResposta.setText("Erro ao processar: casting" );
      }
      ab = anoHome.create();
Criado 22 de junho de 2005
Ultima resposta 22 de jun. de 2005
Respostas 3
Participantes 2