2014-10-17 2 views
0

У меня было приложение JSP/Servlet, работающее с MySQL. Теперь мне пришлось реализовать одно и то же приложение с RMI для моих DAO.Сервер RMI не будет возвращать экземпляры классов

Через некоторые тесты я вижу, что он отлично работает, когда я возвращаю int, String или что-то в этом роде. Удаленные методы с этими типами объектов прекрасно работают.

Но когда я пытаюсь вызвать удаленный метод, который возвращает экземпляр созданного мной класса (Produto), все атрибуты этого объекта: null.

Например: У меня есть таблица db с 3 строками. Этот метод возвращает список с 3-мя объекты на него, но если я называю product.getName(), например, я получаю это:

нуля нуля нуля

На следующем коде, я даже не используя любые методы базы данных. Просто метод тестирования, чтобы увидеть, что объект produto будет возвращен с атрибутами null.

Мой интерфейс, ProdutoDAO:

public interface ProdutoDAO extends Remote{ 
    public Produto teste() throws RemoteException; 
} 

Мой (что бы мой сервер) ProdutoDAOImpl:

public class ProdutoDAOImpl implements ProdutoDAO { 

    private Connection con; 
    Produto prod = new Produto(); 

    public ProdutoDAOImpl() throws RemoteException { 
     con = Conecta.getConnection(); 
    } 

    public Produto teste(){ 
     prod.setNome("Testing! THIS WILL RETURN AS NULL");  
     return prod;   
    } 




    public static void main(String args[]) {   
     int port = 1099; 

     try { 
      ProdutoDAOImpl obj = new ProdutoDAOImpl(); 
      ProdutoDAO stub = (ProdutoDAO) UnicastRemoteObject.exportObject(obj, 0); 

      Registry registry = LocateRegistry.createRegistry(port); 
      registry.bind("ProdutoDAO", stub); 

      System.err.println("Server ready"); 

     } catch (Exception e) { 
      System.err.println("Server exception: " + e.toString()); 
      e.printStackTrace(); 
     }  
    } 
} 

index.jsp

Produto prod = new Produto(); 

try { 
    Registry registry = LocateRegistry.getRegistry(null); 
    ProdutoDAO produtoDAO = (ProdutoDAO) registry.lookup("ProdutoDAO"); 
    prod = produtoDAO.teste(); 

    %><%= prod.getNome() %><% 

} catch (Exception e) { 
    System.err.println("Client exception: " + e.toString()); 
    e.printStackTrace(); 
} 

Проблема заключается в том, что <%= prod.getNome() %> является печать null.

Возможно ли вернуть объект, чтобы я мог прочитать его правильные атрибуты?

ответ

0

Хорошо, я понял.

Сделано моим классом Produto сериализуемым и переименованным в серийную версию на Eclipse.

public final class Produto implements Serializable { 

    private static final long serialVersionUID = 8367908553994431734L; 
    ... 

} 
0

Класс должен либо реализовывать Serializable, либо быть экспортированным удаленным объектом. Нет.

Смежные вопросы