我从RMI开始。
我不想用Java为数据库管理器创建一个服务器(是大学的东西),当我运行下面列出的代码时,为了启动服务器的接口,我与localhost的连接失败:
顺便说一句,我使用OS X和Eclipse进行编码。
/**
*
*/
package es.uned.database;
import es.uned.common.IBasededatos;
import es.uned.common.Utils;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.*;
import es.uned.common.IServidor;
/**
*
* @author
*
*/
public class Basededatos extends UnicastRemoteObject implements IBasededatos{
protected Basededatos() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws Exception {
Utils.setCodeBase(IServidor.class);
if (System.getSecurityManager()==null) {
System.setSecurityManager(new RMISecurityManager());
}
String nombre = "//localhost/Basededatos";
try{
IBasededatos servidorBD = new Basededatos();
Naming.rebind(nombre, servidorBD);
System.out.println("Data base is up an ready");
}catch (Exception e) {
System.err.println("Database exception: " + e.getMessage());
e.printStackTrace();
}
}
}
这是我收到的错误消息。
访问被拒绝(“java.net.SocketPermission”“127.0.0.1:1099”“connect,resolve”)
我尝试过其他代码,但取得了同样的成功
/**
*
*/
package es.uned.database;
import es.uned.common.IBasededatos;
import es.uned.common.Utils;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.*;
/**
*
* @author
*
*/
public class Basededatos implements IBasededatos{
public Basededatos() {
super();
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws Exception {
//Utils.setCodeBase(IServidor.class);
if (System.getSecurityManager()==null) {
System.setSecurityManager(new RMISecurityManager());
}
String nombre = "//localhost/Basededatos";
try{
IBasededatos servidorBD = new Basededatos();
IBasededatos stub = (IBasededatos)UnicastRemoteObject.exportObject(servidorBD, 1099);
Registry registry = LocateRegistry.getRegistry();
registry.rebind(nombre, servidorBD);
System.out.println("Servidor Base de datos arriba");
}catch (Exception e) {
System.err.println("Excepcion base de datos: " + e.getMessage());
e.printStackTrace();
}
}
}
任何人都可以帮助我吗? 非常感谢
答案 0 :(得分:0)
客户端从错误的地方获取注册表。它需要查找的注册表位于服务器主机,而不是它自己的localhost。
RMI URL用于命名类。您正在使用客户端中的注册表界面,因此您根本不应指定//localhost/
。