Java 使用RMI访问对象
我们最近开始使用RMI,我很难理解它 在上一个示例中,(我将在下面介绍)我们使用工厂来存储对象,并在从工厂调用的实例的服务器类中使用Java 使用RMI访问对象,java,refactoring,rmi,Java,Refactoring,Rmi,我们最近开始使用RMI,我很难理解它 在上一个示例中,(我将在下面介绍)我们使用工厂来存储对象,并在从工厂调用的实例的服务器类中使用Naming.rebind() 在上面的示例中,我只有实现和服务器类,没有使用工厂,我如何重新考虑代码以便远程访问对象,我会再次使用Naming.rebind(),还是有其他实现 这是我以前用过的: Class FoodItem{ private String name; private int numCalories; public FoodItem
Naming.rebind()
在上面的示例中,我只有实现和服务器类,没有使用工厂,我如何重新考虑代码以便远程访问对象,我会再次使用Naming.rebind()
,还是有其他实现
这是我以前用过的:
Class FoodItem{
private String name;
private int numCalories;
public FoodItem(String s, int cals)
{
name = s;
numCalories = cals
}
public String getName()
{
return name;
}
public int getNumOfCalories()
{
return numCalories;
}
}
public class FoodItemServer
{
public static void main(String [] args)
{
FoodItem f1 = new FoodItem("Wispa", 254);
FoodItem f2 = new FoodItem("Apple", 45);
System.out.println( "Food Name: " + f1.getName + “has “ +
f1.getCalories +“calories”);
}
}
为了使用RMI,您需要一个实现java.RMI.Remote接口的接口 您的FoodItemServer必须从java.rmi.server.UnicastRemoteObject扩展并实现此接口 此外,您需要在RMI注册表中注册此类,该注册表 必须另外启动。这是一个提供JNDI的特殊服务器 接口
客户端可以通过java.naming机制请求RMI注册表来接收RMI远程接口类型的实例,好的,我明白你的意思,这与我们以前的做法类似,我现在在eclipse中处理它,我应该没事了,谢谢Christian,我会尽快接受你的回答,如果可能的话,我会看看EJB技术或者使用WebService(SOAP/Rest)。RMI仍然是可能的,但在大多数情况下,如果可能,最好使用这些更复杂的技术。RMI注册表提供了一个RMI接口。JNDI提供了一个RMI接口。注册表不提供JNDI接口。扩展UnicastRemoteObject或将该对象绑定到注册表不是必需的:在每种情况下都有备选方案。@EJP不理解您的评论。我不同意rmi没有提供JNDI接口,因为rmi有它自己的命名机制,比如JNDI,但是调用概念是相同的,但是其余的对我来说是完全混淆的。请告诉我备选方案。您可以调用UnicastRemoteObject.exportObject(),而不是扩展UnicastRemoteObject。一旦从注册表中获得一个远程存根,就可以从RMI调用中获取其他存根作为返回值。您可以想象一整棵RMI对象树扎根于注册表中的一棵。
import java.rmi.Naming;
/*
* Creates the server for using RMI
*/
public class PlayerServer
{
public static void main(String args[])
{
System.out.println("Player Server Starting");
try{
PlayerFactory aFactory = PlayerFactory.getInstance();
Naming.rebind("factory", aFactory);
}
catch(Exception e){
e.printStackTrace();
}
}
}