Causa: Las versiones del objeto retornado en el cliente o en el servidor son diferentes
Solución: Realizar una limpieza del proyecto, comprobar que los dos proyecto tanto el servidor como el cliente tienen como dependencia el proyecto que contiene las interfaces remotas y el DTO que se desea intercambiar.
Implementación en codigo:
Servidor:
PersonaServiceImpl: Debe de implementar la interfas remota MensajeServiceRemote del proyecto de dependencias.
public class PersonaServiceImpl implements MensajeServiceRemote, Serializable{
private static final long serialVersionUID = 7143324113539318787L;
public OrdenCompra enviarMensaje(OrdenCompra orden) {
orden.setId(orden.getId()+1);
orden.setNombreSocio(orden.getNombreSocio()+" procesado");
orden.setNumeroOrden(orden.getNumeroOrden()+" procesado");
return orden;
}
}
_________________________________________________________________________________
Proyecto dependencia Interfaces y DTOs:
Debe contener la interfas remota y el DTO que se va a intercambiar entre el cliente y servidor
Interfas:
@Remote
public interface MensajeServiceRemote {
OrdenCompra enviarMensaje(OrdenCompra orden);
}
DTO:
public class OrdenCompra implements Serializable {
private static final long serialVersionUID = -7986978429487671468L;
private Long id;
private String numeroOrden;
private String nombreSocio;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNumeroOrden() {
return numeroOrden;
}
public void setNumeroOrden(String numeroOrden) {
this.numeroOrden = numeroOrden;
}
public String getNombreSocio() {
return nombreSocio;
}
public void setNombreSocio(String nombreSocio) {
this.nombreSocio = nombreSocio;
}
}
Proyecto Cliente RMI
Clase de prueba:
public class ClientePersonaService {
public static void main(String[] args) {
System.out.println("Se esta llamando a la clase pertienente");
System.out.println("Iniciando llamada al EJB desde el cliente\n");
Context jndi = null;
try {
jndi = new InitialContext();
MensajeServiceRemote mensajeService = (MensajeServiceRemote) jndi.lookup("java:global/proyectoweb/PersonaServiceImpl!co.com.sp.interfaces.MensajeServiceRemote");
OrdenCompra orden = new OrdenCompra();
orden.setId((long)1);
orden.setNombreSocio("Servio Pantoja");
orden.setNumeroOrden("11111");
orden = mensajeService.enviarMensaje(orden);
System.out.println(orden.getId()+" "+orden.getNombreSocio()+" "+orden.getNumeroOrden()+" "+" Procesado cliente");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Tener en cuenta que el jndi.lookup("java:global/proyectoweb/PersonaServiceImpl!co.com.sp.interfaces.MensajeServiceRemote");
Debe ser el Jndi de la interfas que se quiere invocar como servicio.
No hay comentarios:
Publicar un comentario