您的位置:首页 > 编程语言 > Java开发

Java RMI 的简单示例

2014-11-24 16:46 399 查看
1. 远程传输对象:

package com.huey.dream.bean;

import java.io.Serializable;

/**
* 远程传输对象,须实现java.io.Serializable接口
* @author  huey
* @version 1.0
* @created 2014-11-18
*/
public class Book implements Serializable {

/**
*
*/
private static final long serialVersionUID = 8807174227849297542L;

private String title;
private String author;

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public Book() {
super();
}

public Book(String title, String author) {
super();
this.title = title;
this.author = author;
}

@Override
public String toString() {
return "Book [title=" + title + ", author=" + author + "]";
}
}


2. 远程对象调用接口:
package com.huey.dream.serv;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import com.huey.dream.bean.Book;

/**
* 远程对象调用接口,须实现java.rmi.Remote接口
* @author  huey
* @version 1.0
* @created 2014-11-18
*/
public interface BookServ extends Remote {

/**
* 远程对象调用接口的方法,须抛出java.rmi.RemoteException异常
* @param author
* @return
* @throws RemoteException
*/
public List<Book> getBooksByAuthor(String author) throws RemoteException;

}


3. 远程对象调用接口实现:

package com.huey.dream.serv.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;

import com.huey.dream.bean.Book;
import com.huey.dream.serv.BookServ;

/**
* 远程调用对象实现类,须继承java.rmi.server.UnicastRemoteObject类
* @author  huey
* @version 1.0
* @created 2014-11-18
*/
public class BookServImpl extends UnicastRemoteObject implements BookServ {

/**
*
*/
private static final long serialVersionUID = -3185430753116015923L;
private List<Book> allBooks;

public BookServImpl() throws RemoteException {
allBooks = new ArrayList<Book>();
allBooks.add(new Book("白夜行", "东野圭吾"));
allBooks.add(new Book("嫌疑人X的献身", "东野圭吾"));
allBooks.add(new Book("百年孤独", "加西亚·马尔克斯"));
}

@Override
public List<Book> getBooksByAuthor(String author) throws RemoteException {
List<Book> books = new ArrayList<Book>();
for (Book book : allBooks) {
if (author.equals(book.getAuthor())) {
books.add(book);
}
}
return books;
}

}


4. 服务端:

package com.huey.dream.main;

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

import com.huey.dream.serv.BookServ;
import com.huey.dream.serv.impl.BookServImpl;

/**
* RMI服务端
* @author  huey
* @version 1.0
* @created 2014-11-18
*/
public class RmiServer {

public static void main(String[] args) {

try {
BookServ bookServ = new BookServImpl();

// 注册端口
LocateRegistry.createRegistry(8098);
// 注册路径
Naming.rebind("rmi://127.0.0.1:8098/bookserv", bookServ);

System.out.println("Service Start!");
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}

}

}


5. 客户端:

package com.huey.dream.main;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.List;

import com.huey.dream.bean.Book;
import com.huey.dream.serv.BookServ;

/**
* RMI客户端
* @author  huey
* @version 1.0
* @created 2014-11-18
*/
public class RmiClient {

public static void main(String[] args) {
try {
// 获取远程对象
BookServ bookServ = (BookServ) Naming.lookup("rmi://127.0.0.1:8098/bookserv");

List<Book> books = bookServ.getBooksByAuthor("东野圭吾");
for (Book book : books) {
System.out.println(book);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: