java.lang.classcastException:com.sun.proxy.$ proxy1无法投入使用



服务器:

Registry registry = LocateRegistry.createRegistry(1099);
InventoryInterface Inventory = new Inventory(registry);
registry.bind("Inventory", Inventory);

客户端:

Registry registry = LocateRegistry.getRegistry(1099);

InventoryInterface inventory = (InventoryInterface) registry.lookup("Inventory");

String product_id = inventory.newProduct();
ProductFacade product_1 = (ProductFacade) registry.lookup(product_id);

问题是例外发生在铸件中,在这种情况下,它发生在:ProductFacade product_1 = (ProductFacade) registry.lookup(product_id);

例外:

Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to rmi.ProductFacade

您要查找的名称所绑定到注册表的任何内容都不会实现rmi.ProductFacade远程接口。

所以我想知道我是否应该在再次施放注册表

之前重新启动注册表

当然不是。(a)您无法从客户端重新启动它,(b)您将获得的只是一个空注册表。该建议没有意义。

很难了解为什么InventoryInterface.newProduct()返回String而不是实际的新ProductFacade对象。listAllProducts()返回String而不是String[]的原因也是如此。我会在不大量使用注册表的情况下重新设计它:

public interface InventoryInterface extends Remote {    
    public ProductFacade newProduct() throws RemoteException;
    public ProductFacade getProduct(String id) throws RemoteException;    
    public String[] listAllProducts() throws RemoteException;
}

它可以与您的绑定有关。例如,如果ProductFacade实现了库存系数,则可能需要将其施放为库存界面而不是productfacade。

相关内容

  • 没有找到相关文章

最新更新