RMI服务器不会返回类实例

时间:2014-10-17 23:05:33

标签: java jsp rmi

我有一个运行正常的JSP / Servlet应用程序。现在我必须使用RMI为我的DAO实现相同的应用程序。

通过一些测试,我可以看到当我返回intString或类似的东西时,它可以正常工作。具有这些类型对象的远程方法可以正常工作。

但是当我尝试调用一个返回我创建的类的实例的远程方法(Produto)时,该对象的所有属性都是null

例如:我有一个包含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

是否可以返回一个对象,以便我可以读取它的正确属性?

2 个答案:

答案 0 :(得分:1)

该类需要实现Serializable或者是导出的远程对象。你的不是。

答案 1 :(得分:0)

好的我明白了。

使我的Produto类可序列化并在Eclipse上重新生成串行版本。

public final class Produto implements Serializable {

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

}