Java RMI服务器赢得';t返回类实例
我有一个JSP/Servlet应用程序,在MySQL中运行正常。现在我必须为我的DAO使用RMI实现相同的应用程序 通过一些测试,我可以看到当我返回Java RMI服务器赢得';t返回类实例,java,jsp,rmi,Java,Jsp,Rmi,我有一个JSP/Servlet应用程序,在MySQL中运行正常。现在我必须为我的DAO使用RMI实现相同的应用程序 通过一些测试,我可以看到当我返回int、String或类似的内容时,它运行良好。使用这些类型的对象的远程方法可以很好地工作 但是当我尝试调用一个远程方法返回我创建的类的实例(Produto)时,该对象的所有属性都是null 例如:我有一个包含3行的db表。该方法返回一个包含3个对象的列表,但如果我调用product.getName(),例如,我会得到以下结果: 空的 无效的 空的
int
、String
或类似的内容时,它运行良好。使用这些类型的对象的远程方法可以很好地工作
但是当我尝试调用一个远程方法返回我创建的类的实例(Produto
)时,该对象的所有属性都是null
例如:我有一个包含3行的db表。该方法返回一个包含3个对象的列表,但如果我调用product.getName()
,例如,我会得到以下结果:
空的
无效的
空的
在下面的代码中,我甚至没有使用任何数据库方法。这只是一个测试方法,用于查看对象produto
将返回null
属性
我的界面,ProdutoDAO:
public interface ProdutoDAO extends Remote{
public Produto teste() throws RemoteException;
}
我的(什么是我的服务器)产品目录:
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();
}
Produto-prod=new-Produto();
试一试{
Registry Registry=LocateRegistry.getRegistry(null);
ProdutoDAO ProdutoDAO=(ProdutoDAO)registry.lookup(“ProdutoDAO”);
prod=produtoDAO.teste();
%> 好吧,我知道了
使我的Produto类可序列化,并在Eclipse上重新生成串行版本
public final class Produto implements Serializable {
private static final long serialVersionUID = 8367908553994431734L;
...
}
该类需要实现可序列化或是导出的远程对象。您的既不是