当前位置: 首页 > 面试题库 >

无法启动RMI Fibonacci服务器

颜哲彦
2023-03-14
问题内容

我正在学习Java
RMI,并且创建了一个非常简单的服务器来计算斐波那契数。服务器(FibonacciServer)创建一个负责计算序列的对象(Fibonacci),并且该对象实现接口(IFibonacci):

FibonacciServer.java:

package myrmifibonacciserver;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class FibonacciServer {
    public static void main(String args[]){
        try{
            Fibonacci fib = new Fibonacci();
            Naming.rebind("fibonacci", fib);
            System.out.println("Fibonacci Server ready.");
        }catch(RemoteException rex){
            System.err.println("Exception in Fibonacci.main " + rex);
        } catch (MalformedURLException ex) {
            System.err.println("MalformedURLException " + ex);
        }
    }
}

斐波那契

package myrmifibonacciserver;

import java.math.BigInteger;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Fibonacci extends UnicastRemoteObject implements IFibonacci{

    private static final long serialVersionUID = -4300545841720809981L;

    public Fibonacci() throws RemoteException{
        super();
    }

    @Override
    public BigInteger getFibonacci(int n) throws RemoteException {
        return getFibonacci(new BigInteger(Long.toString(n)));
    }

    @Override
    public BigInteger getFibonacci(BigInteger n) throws RemoteException {
        System.out.println("Calculating teh " + n + "th Fibonacci number");
        BigInteger zero = BigInteger.ZERO;
        BigInteger one = BigInteger.ONE;

        if(n.equals(zero) || n.equals(one)) 
            return one;

        BigInteger current = one;
        BigInteger low = one;
        BigInteger high = one;
        BigInteger temp;

        while(current.compareTo(n) == -1){
            temp = high;
            high = high.add(low);
            low = temp;
            current = current.add(one);
        }
        return high;
    }

}

IFibonacci:

package myrmifibonacciserver;

import java.math.BigInteger;
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IFibonacci extends Remote{
    public BigInteger getFibonacci(int n) throws RemoteException;
    public BigInteger getFibonacci(BigInteger n) throws RemoteException;
}

如您所见,这是一个非常基本的示例。我正在使用命令在Linux上启动RMI注册表rmiregistry &,它启动没有问题。

但是,当我单击运行按钮(在Eclipse或Netbeans中)运行我的小项目时,出现错误:

Exception in Fibonacci.main java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: myrmifibonacciserver.IFibonacci

而且我不知道为什么!起初我以为是因为存根,但是由于我使用的是Java 1.7,所以它们是自动创建的。我究竟做错了什么 ?


问题答案:

找不到代码库。原因是,从JDK 7开始,java.rmi.server.useCodebaseOnly属性默认情况下为 true
,而在先前版本中,默认情况下为 false

当property为 false时, 它将使用服务器的代码库,但在 真实 情况下,它将忽略它。

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7.html

您的问题将在较低的JDK中解决。前JDK6



 类似资料:
  • 问题内容: 码头工人给我一个困难时期。我按照以下说明进行操作,以便在运行由strato.de托管的Ubuntu 14.04的虚拟服务器上安装docker。 执行此行直接将我带入此错误消息: 安装完成后,我安装了上述两个软件包。现在我的问题是我无法让docker运行。 结果是: 结果是 和 结果是 有人对缺少哪些依赖项有任何线索吗?还有什么可能出问题了?码头工人是否提供任何日志? 我正在来回寻找解决

  • 当收到来自服务器的数据报文时,显示错误日志:

  • 我有一个spring boot可执行罐,装在数字海洋水滴中。我可以使用现在我想让我作为一个服务运行。 我已经创建了文件/etc/systemd/system/myapp。用这些内容服务 然后使其在系统启动时启动 我正在尝试启动服务 但是我得到了这个错误 无法启动myapp.service:未知单位:myapp.service详情请参阅系统日志和'systemctl statusmyapp.serv

  • 好吧,这就是问题所在。我做,但我没有从或获得新的日志消息。 舱单: null 活动代码: 我试过什么: 将所有“cont”更改为“this” StartService(新意图(cont,FlashService.class)); null 更新: 完整活动代码:

  • 问题内容: 我已经安装了rails和mysql。我还安装了mysql2 gem。我通过命令rails new try_cms -d mysql创建了Rails应用程序。创建成功。但是,当我尝试使用rails server命令运行WEBrick服务器时,出现以下错误。 提前致谢。 问题答案: 尝试运行此命令(在此处查看类似的问题)

  • 我正在亚马逊EC2和ubuntu上运行Kafka。首先,我尝试运行zookeeper服务器并创建一个测试主题。最终目的是将spark与Kafka结合起来进行情感分析。 当我尝试启动zookeeper服务器时,我收到以下警告,并且进程似乎没有结束,即键入此命令后,我没有看到shell提示:bin/zookeeper服务器启动。sh配置/zookeeper。属性 警告配置中未定义配置或未定义仲裁,以独

  • 我无法重启服务器。 开始时,我杀死了所有进程并重新启动了服务器。我收到了成功的消息,但应用程序不起作用。我再次停止并启动了服务。现在系统显示服务器上正在运行另一个进程,如下所示。 你能帮我查一下这个问题吗?

  • 我已经按照指示从:https://cloud.spring.io/spring-cloud-static/Dalston.SR5/multi/multi_spring-cloud-eureka-server.html 没有成功,就不知道会错过什么。 我有一些代码演示:https://github.com/dbranco/eureka-server 我期待着运行:gradlew bootRun并能够