我用这些当前文件实现了一个RMI接口;
MyClient.java - Clientside code
MyServer.java - Serverside code
Adder.java - Interface
AdderRemote.java - Remote _implements Adder_
DataAccess.java - Contains all the methods to interveen between server and client我有一个vp,它包含除了目录中的客户端文件之外的所有文件。
vps:~/rmi# 在自己测试时,即:在服务器上编译,执行
rmic AdderRemote
rmiregistry 5000&(我选择的港口)
java -classpath .:mysql-connector... MyServer然后在本地执行相同的进程,但却运行MyClient java,它可以工作。我现在面临的问题是将它实现到一个我已经在eclipse中运行的项目中,作为其中的一部分;
我在主文件中有一个MyClient实例,然后作为参数传递给特定的类(这个项目实现了MVC模式,并被传递给同类模型类‘),现在我得到了错误
java.rmi.NotBoundException: xox在谷歌搜索后,我能找到的唯一回应是“试图查找一个没有绑定的名称”,但我不太确定这意味着什么?我会附上我的代码,任何帮助都将不胜感激。
MyClient.java
public class MyClient
{
public Adder stub;
public MyClient ()
{
try
{
stub = (Adder)Naming.lookup("rmi://92.222.2.96:5000/xox");
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
public static void connect(Adder stub) throws RemoteException
{
System.out.println(stub.connect());
}Adder.java
public interface Adder extends Remote
{
public String connect() throws RemoteException;
}AdderRemote.java
public class AdderRemote extends UnicastRemoteObject implements Adder
{
public AdderRemote() throws RemoteException
{
super();
da = new DataAccess();
}
DataAccess da;
public String connect() throws RemoteException
{
return da.connect();
}DataAccess.java
public class DataAccess
{
// Connection info
static final String URL = "jdbc:mysql://92.222.2.96:3306/groupproj";
static final String DRIVER = "com.mysql.jdbc.Driver";
static final String USERNAME = "root";
static final String PASSWORD = "*****";
Connection c = null;
public String connect()
{
try
{
Class.forName(DRIVER).newInstance(); //Load DB driver
c = DriverManager.getConnection(URL, USERNAME, PASSWORD); //Establish connection to DB2
return "Connected.";
}
catch(Exception e)
{
return e.toString();
}
}MyServer.java
public class MyServer
{
public static void main ( String args[] )
{
try
{
Adder stub = new AdderRemote();
Naming.rebind("rmi://92.222.2.96:5000/xox", stub);
}
catch ( Exception e )
{
System.out.println(e);
}
}
public static void connect(Adder stub) throws RemoteException
{
try
{
stub.connect();
}
catch(Exception e)
{
System.out.println("Could not connect to the DB.");
}
}我收集到,因为服务器上的文件位于目录"rmi“中,所以我将xox重命名为xox,但这并没有解决问题,所以我将其恢复为xox,在将其放入java项目之前,xox工作了。
谢谢
发布于 2015-05-15 00:49:41
您一定有一个异常执行绑定。
如果您在同一个注册表中查找相同的名称时得到了一个NotBoundException,那么您根本就没有绑定它。
备注:
"localhost"或unbind().时,总是使用bind(), rebind(),作为主机名是很方便的。RemoteException和NotBoundException从MyClient.的构造函数中抛出MyClient.connect()不应该是静态的。事实上,它不可能是静态的。因此,这不可能是真正的代码。https://stackoverflow.com/questions/30249314
复制相似问题