首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java 1.7启动rmic注册表和服务器?

如何使用java 1.7启动rmic注册表和服务器?
EN

Stack Overflow用户
提问于 2013-08-09 22:45:32
回答 2查看 1.5K关注 0票数 0

我是java RMI的新手,实际上我编写、编译并启动了rmic,也尝试过启动服务器,但由于_stub 'ClassNotFound‘异常而失败了.....我使用的是java 7...我在Google上搜索了很多,但没有人告诉我一步一步的例子可以工作……我对stteing代码库和安全策略有了一些想法,但没有非常清楚的建议如何做到这一点。请告诉我包括命令行在内的步骤..........请..。我有一切只是告诉我如何启动服务器,以及所需的设置,如代码库或策略设置等…谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-08-12 12:53:23

您不需要使用rmic。相反,应创建服务器对象并调用其中一个具有端口参数的exportObject()方法重载。例如,

代码语言:javascript
复制
MyRemoteIntf stub = UnicastRemoteObject.exportObject(server, 0);

这将导致RMI自动生成存根。(在这一点上,文档非常不清楚。如果您使用不带端口参数的版本,它将只使用旧的rmic-generated存根,而不是自动生成它们。)

另外,确保您的远程接口位于注册表和任何客户端的代码库中。如果你没有做好这件事,你会得到不同的错误。这个问题在Stackoverflow上已经被回答过很多次了;搜索"rmi ClassNotFoundException“。

票数 1
EN

Stack Overflow用户

发布于 2013-08-10 05:48:38

由于java (J2SE) 5.0存根是在运行时动态生成的,因此不需要使用rmic命令。

下面是如何使用RMI的基本分步示例。

首先定义远程接口,该接口定义客户端可以查看和执行的内容:

代码语言:javascript
复制
public interface FooService extends Remote {
    // Don't forget to add throws RemoteException.
    public void bar() throws RemoteException;
}

注意:如果您不将throws RemoteException添加到方法声明中,您将遇到以下异常:

代码语言:javascript
复制
java.lang.IllegalArgumentException: illegal remote method encountered: public abstract void RMIExample.FooService.bar()

在定义了客户端可以执行的操作之后,必须在服务器幻灯片上定义方法的具体实现:

代码语言:javascript
复制
public class FooServiceImpl extends UnicastRemoteObject implements FooService {
    public FooServiceImpl() throws RemoteException {
        super();
    }

    public void bar() {
        System.out.println("I was remotely invoked!");
    }
}

实现类必须继承自UnicastRemoteObject并实现您先前定义的远程接口,并且该类必须具有抛出RemoteException的构造函数。

现在您已经完全定义了远程功能,您必须将实现对象绑定到服务器端的URL:

代码语言:javascript
复制
// 4000 is the port to listen on.
LocateRegistry.createRegistry(4000);
Naming.rebind("//127.0.0.1:4000/foobar", new FooServiceImpl());

现在您已经启动并运行了服务器,您需要一个存根实例,也就是客户端的代理:

代码语言:javascript
复制
FooService fooService = 
       (FooService)Naming.lookup("//127.0.0.1:4000/foobar");

最后调用远程方法:

代码语言:javascript
复制
fooService.bar();

应在服务器端打印以下内容:

代码语言:javascript
复制
I was remotely invoked!

参考:

http://en.wikipedia.org/wiki/Java_remote_method_invocation http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/relnotes.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18149443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档