我是靠谱客的博主 强健星星,最近开发中收集的这篇文章主要介绍java rmi网络中断_Java RMI远程调用踩坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java RMI的原理就不多说了,可以在其他地方看到,这里记录主要是在尝试一个小的rmi示例的时候遇到的坑

1

示例里使用了jndi.properties来配置java的命名空间,所以要把这个文件跟编译生成的class文件放在一起(项目中就是out文件夹下那些class文件一起的位置),并且在idea里设置项目的CLASSPATH为编译生成的文件位置

2

一开始使用的是Java13进行编译的,但是我的电脑上原来装的运行环境是Java8,这样就会报错说是版本有问题之类的,可以设置项目jdk为1.8

3

一定要在server启动之前,启动rmiregistery,在classpath下启动(也就是jndi配置文件所在的位置)

code

server

Warehouse.java

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Warehouse extends Remote {

double getPrice(String description) throws RemoteException;

}

WarehouseImpl.java

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import java.util.HashMap;

import java.util.Map;

public class WarehouseImpl extends UnicastRemoteObject implements Warehouse {

private Map prices;

public WarehouseImpl() throws RemoteException

{

prices = new HashMap();

prices.put("Blackwell Toaster", 24.95);

prices.put("ZapXpress Microwave Oven", 49.95);

}

public double getPrice(String description) throws RemoteException

{

Double price = prices.get(description);

return price == null ? 0 : price;

}

}

WarehouseServer.java

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import java.rmi.RemoteException;

public class WarehouseServer {

public static void main(String[] args) throws

RemoteException, NamingException {

System.out.println("Constructing server implementation...");

WarehouseImpl centralWarehouse = new WarehouseImpl();

System.out.println("Binding server implementation to registry...");

Context namingContext = new InitialContext();

namingContext.bind("rmi:central_warehouse", centralWarehouse);

System.out.println("Waiting for invocations from clients...");

}

}

client

Warehouse.java

这个文件与server端Warehouse相同

WarehouseClient.java

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import java.rmi.RemoteException;

public class WarehouseClient {

public static void main(String[] args) throws NamingException, RemoteException {

Context namingContext = new InitialContext();

String url = "rmi://localhost/central_warehouse";

Warehouse centralWarehouse = (Warehouse) namingContext.lookup(url);

String descr = "Blackwell Toaster";

double price = centralWarehouse.getPrice(descr);

System.out.println(descr + ": " + price);

}

}

jndi.properities

java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory

java.naming.provider.url=rmi://localhost:1099

最后

以上就是强健星星为你收集整理的java rmi网络中断_Java RMI远程调用踩坑的全部内容,希望文章能够帮你解决java rmi网络中断_Java RMI远程调用踩坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部