我有一个运行正常的JSP / Servlet应用程序。现在我必须使用RMI为我的DAO实现相同的应用程序。
通过一些测试,我可以看到当我返回int
,String
或类似的东西时,它可以正常工作。具有这些类型对象的远程方法可以正常工作。
但是当我尝试调用一个返回我创建的类的实例的远程方法(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
。
是否可以返回一个对象,以便我可以读取它的正确属性?
答案 0 :(得分:1)
该类需要实现Serializable或者是导出的远程对象。你的不是。
答案 1 :(得分:0)
好的我明白了。
使我的Produto类可序列化并在Eclipse上重新生成串行版本。
public final class Produto implements Serializable {
private static final long serialVersionUID = 8367908553994431734L;
...
}