java遠程調用rmi入門實例
阿新 • • 發佈:2017-05-11
路徑 cast server super nbsp start 發生 extends 通過
第二定義實體接口,必須繼承 java.rmi.Remote
server端啟動
client測試,最好找還有一臺機子(當然同一臺機子或許,只是為了模擬真實情況,還是還有一臺機子,記得iP要換)創建client。切記:相關的類的包的路徑要跟server一樣
RMI是Java的一組擁護開發分布式應用程序的API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。簡單地說,這樣使原先的程序在同一操作系統的方法調用。變成了不同操作系統之間程序的方法調用。因為J2EE是分布式程序平臺。它以RMI機制實現程序組件在不同操作系統之間的通信。
比方,一個EJB能夠通過RMI調用Web上還有一臺機器上的EJB遠程方法。
用例server端結構大概如此
首先定義要傳送的實體類,由於要網絡傳輸。必須實現序列化
User.java
package com.yiyuwanglu.rmi.entity; import java.io.Serializable; public class User implements Serializable { /** * */ private static final long serialVersionUID = -8400949180923337013L; private String id; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
UserService
package com.yiyuwanglu.rmi.service; import java.rmi.Remote; import java.rmi.RemoteException; import com.yiyuwanglu.rmi.entity.User; public interface UserService extends Remote { public User getUserById(String id)throws RemoteException; }第三,實現接口 記得繼承UnicastRemoteObject
UserServiceImpl
package com.yiyuwanglu.rmi.service.impl; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import com.yiyuwanglu.rmi.entity.User; import com.yiyuwanglu.rmi.service.UserService; public class UserServiceImpl extends UnicastRemoteObject implements UserService { /** * */ private static final long serialVersionUID = 6222175854495075991L; public UserServiceImpl() throws RemoteException { super(); // TODO Auto-generated constructor stub } @Override public User getUserById(String id) { User user=new User(); user.setId(id); user.setAge(100); user.setName("測試"); return user; } }
server端啟動
Program.java
package com.yiyuwanglu.rmi.program; import java.net.MalformedURLException; import java.nio.channels.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import com.yiyuwanglu.rmi.service.UserService; import com.yiyuwanglu.rmi.service.impl.UserServiceImpl; public class Program{ public static void main(String[] args) { // TODO Auto-generated method stub try { UserService userService=new UserServiceImpl(); //註冊通訊端口 LocateRegistry.createRegistry(6600); //註冊通訊路徑 Naming.rebind("rmi://127.0.0.1:6600/userService", userService); System.out.println("Service Start!"); } catch (RemoteException e) { System.out.println("創建遠程對象發生異常!"); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println("發生反復綁定對象異常!
"); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println("發生URL畸形異常!"); e.printStackTrace(); } } }
client測試,最好找還有一臺機子(當然同一臺機子或許,只是為了模擬真實情況,還是還有一臺機子,記得iP要換)創建client。切記:相關的類的包的路徑要跟server一樣
比如:client的 UserService
package com.yiyuwanglu.rmi.service;最後client調用
package com.yiyuwanglu.rmi.program; import java.rmi.Naming; import com.yiyuwanglu.rmi.entity.User; import com.yiyuwanglu.rmi.service.UserService; public class Client { public static void main(String[] args){ try{ //調用遠程對象,註意RMI路徑與接口必須與server配置一致 UserService userService=(UserService)Naming.lookup("rmi://127.0.0.1:6600/userService"); User user =userService.getUserById("1245"); System.out.println(user.getName()); }catch(Exception ex){ ex.printStackTrace(); } } }
先啟動server端 Program 然後啟動client Client顯示結果各自是
Service Start!
client
測試
java遠程調用rmi入門實例