`

最小的RMI例子(jdk6)

 
阅读更多

编写了一个最小的RMI例子(JDK1.6)

服务器端

package stg.server;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Service extends Remote {
	String echo(String client) throws RemoteException;
}

 

 

package stg.server;

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

public class ServiceImpl extends UnicastRemoteObject implements Service {

	protected ServiceImpl() throws RemoteException {
		super();
	}

	public String echo(String client) throws RemoteException{
		return "From rmi Server: Hello! " + client;
	}
}

 

package stg.server;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Deploy {

	/**
	 * @param args
	 * @throws NamingException 
	 * @throws RemoteException 
	 */
	public static void main(String[] args) throws NamingException, RemoteException {
		Service service = new ServiceImpl();
		//registry		
		LocateRegistry.createRegistry(25002);
		//context
		Context namingCtx = new InitialContext();
		//bind
		namingCtx.bind("rmi://localhost:25002/service", service);			
	}
}

 客户端

 

package stg.client;

import javax.naming.Context;
import javax.naming.InitialContext;

import stg.server.Service;

public class Client {

	public static void main(String[] args) throws Exception {
		Context namingCtx = new InitialContext();
		Service service = (Service)namingCtx.lookup("rmi://192.168.8.2:25002/service");
		String echo = service.echo("StoneGreen");
		System.out.println(echo);
	}
}

  

分享到:
评论
1 楼 gpogpogpo 2012-03-25  
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.MarshalException: error marshalling arguments; nested exception is: 
	java.io.NotSerializableException: com.ccl.rmi.util.ServiceImpl]
	at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:126)
	at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:208)
	at javax.naming.InitialContext.bind(InitialContext.java:400)
	at com.ccl.rmi.util.Deploy.main(Deploy.java:30)
Caused by: java.rmi.MarshalException: error marshalling arguments; nested exception is: 
	java.io.NotSerializableException: com.ccl.rmi.util.ServiceImpl
	at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
	at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:120)
	... 3 more
Caused by: java.io.NotSerializableException: com.ccl.rmi.util.ServiceImpl
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
	... 5 more

相关推荐

    JAVA RMI简单例子

    这个"JAVA RMI简单例子"旨在帮助我们深入理解RMI的基本原理和实现步骤。 RMI的核心概念包括远程接口、远程对象和RMIC编译器。首先,我们需要定义一个远程接口,该接口声明了可以在远程服务器上执行的方法。这些方法...

    spring rmi 小例子

    7. **工具使用**:在开发过程中,我们可能需要使用JDK自带的`rmiregistry`来启动RMI注册表,以及`jconsole`或`jvisualvm`来监控服务的运行状态。此外,IDE如IntelliJ IDEA或Eclipse也有相应的插件来简化RMI的配置和...

    RMI 例子

    ### 简单RMI例子 这个例子的代码可能包括以下部分: 1. **定义远程接口**: ```java public interface MyRemoteInterface extends Remote { String doSomething(String input) throws RemoteException; } ``` 2....

    RMI例子

    这个“RMI例子”显然是一个用于教学或实践RMI技术的示例项目,通过Eclipse这样的集成开发环境(IDE)可以方便地运行和测试。 在RMI中,主要涉及以下几个核心概念: 1. **远程接口(Remote Interface)**:这是定义...

    JDK动态代理proxy

    在这个例子中,当我们调用`calculator.add(5, 3)`时,实际上会通过`LoggingInvocationHandler`的`invoke()`方法,先打印开始计算的日志,然后调用实际的`RealCalculator`对象的`add()`方法,最后打印计算结束的日志...

    java rmi HelloWorld版(源码)

    现代的Java RMI已经不再需要显式创建stub和skeleton,它们由JDK自动处理。 5. **RMI服务器(Server)**:运行远程对象的Java应用,负责处理来自客户端的请求。 6. **RMI客户端(Client)**:通过RMI调用远程方法的...

    《Java JDK6学习笔记》(中文ppt->pdf)

    ### Java JDK6 学习要点详析 #### 一、Java 概览 - **起源与发展**:Java 最初由 Sun Microsystems 的 James Gosling 在 Green Project 中开发,初衷是为了创建一个名为 Star7 的应用程序。其命名灵感来源于 ...

    rmi入门

    “工具”标签可能意味着博客中提到了与RMI相关的工具或库,如JDK自带的rmic编译器,或者是用于调试和管理RMI服务的其他实用工具。 【压缩包子文件的文件名称】:“网络程序设计-RMI-2010.ppt” 这个PPT文件很可能...

    RMI创建及部署教程1

    在这个例子中,客户端运行在Windows 10上,使用JDK 1.7,而服务器端运行在Windows 7上,使用JDK 1.8。同时,服务器端还需要IIS 7.0来支持RMI服务。 2. **创建RMI组件**: - **MyRemote.java**:定义了一个继承自`...

    Dubbo第一个例子

    6. **远程调用(RPC)**:Dubbo基于Java的RMI实现远程过程调用(RPC)。当服务消费者调用服务接口时,Dubbo会自动处理网络通信,使得调用如同本地方法一样便捷。 7. **负载均衡(Load Balancing)**:如果服务提供...

    《EJB3.0实例子教程》jar包1

    《EJB3.0实例子教程》jar包1包含了多个重要的Java企业级开发库,这些库主要用于实现EJB(Enterprise JavaBeans)3.0规范,该规范是Java平台企业版(Java EE)的一部分,用于构建分布式、事务处理、安全性和可伸缩的...

    java教程.rar

    JAVA平台:JDK 1.6 Servlet:Tomcat 5.5 数据库:Access数据库(仅数据库章节需要) 2.本书所附光盘范例 第2章 示例描述:演示简单Java语言基础。 BianLiang.java 一个局部变量的例子 第3章 示例描述:本章...

    Java项目开发与毕业设计指导

    public——public目录包含了Agent的一些例子,而且还应该包含我们自己编写的Agent的根目录。 lib——lib目录包含了Aglet的库文件和其他Aglet技术所需要的库文件。 (2)Aglet的安装 为了安装Aglet平台需要使用...

    JNDI注入学习1

    在上述例子中,服务端创建了一个RMI服务器,绑定了一个包含恶意`Reference`对象的`ReferenceWrapper`。恶意代码(test.class)中包含了一个简单的构造函数,执行计算器程序(`Runtime.getRuntime().exec("calc")`)...

    利用Java二次开发UG NX.doc

    这个例子中,我们创建了一个会话对象并打开一个列表窗口,然后在窗口中写入“Hello, World!”。 3. **编译和运行**:在命令行中切换到源代码目录,使用JDK的javac命令编译Java源文件。然后,可以通过Java的`java`...

    jstat官方介绍

    举一个简单的例子,若想监控本地JVM的垃圾收集统计信息,并每隔5秒输出一次数据,共输出10次,可以使用如下命令: ``` jstat -gc -t *** ``` 在上述命令中,`12345`是目标JVM的本地标识符,`5`表示输出间隔为5秒,...

    java后端源码部署-JavaTutorial:Java教程:基础、中级、高级;常用的工具和Servlet容器使用说明

    注:部分例子基于JDK8。 关键字 数据结构 定时器 数据库 XML 序列化与反序列化 Gson 单元测试 EasyMock WireMock Mockito 网络&I/O RMI HTTP Netty 4.0.x 线程&并发 反射&代理 AOP 脚本语言 加密解密 开源组件 ...

    dubbo源码解析 1 pdf2.0

    4. Java RPC机制:了解Java RPC机制,如rmi、hessian、thrift、webservice等,这些是理解Dubbo底层通信机制的关键。 5. Java其他内容:涉及序列化、SPI、代理、Classloader、ScriptEngine等Java高级特性。 在了解...

Global site tag (gtag.js) - Google Analytics