自己依照已有的源代碼,主要是在JMX框架下,實現(xiàn)了RMI遠(yuǎn)程調(diào)用的一個簡單的例子,主要是為了驗證RMI調(diào)用時文件的配置情況。
主要有forPlay類及對應(yīng)的MBean,Server端以及client端,其中,clint端是和其他文件異地配置的,在同一臺機子上更沒問題了。通過RMI遠(yuǎn)程連接,我們可以實現(xiàn)一個瘦客戶端的,即主要的MBean是放在Server端,客戶端使用相應(yīng)的類時,只需要通過RMI調(diào)用就行了,另外,MBean只需和服務(wù)器同包放置或者服務(wù)器能夠找到的位置,無須顯式的注冊,這是我實現(xiàn)這個程序的主要目的。
server端的源代碼和JMX下RMI遠(yuǎn)程調(diào)用的入門(環(huán)境變量的設(shè)置)里面的Server.java文件是一樣的,涉及到環(huán)境變量以及如何運行,這篇文章里也有詳細(xì)介紹。這里只給出我今天寫的一段代碼
整個程序一共有四個文件
forReplay.java、forReplayMBean.java、Client.java以及前面說到的Server.java,這里給出前三個文件的代碼:
***********************************************************
forReplay.java
***************************************
public class forReplay
implements forReplayMBean{
private String State="待調(diào)用";
public void play(){
System.out.println("play函數(shù)調(diào)用成功!");
}
public String getState() {
return State;
}
public void setState(String s) {
State=s;
}
}
***********************************************************
***********************************************************
forReplayMBean.java
***************************************
public interface forReplayMBean {
public String getState();
public void setState(String s);
public void play();
}
***********************************************************
***********************************************************
Client.java
***************************************
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
public static void main(String[] args) {
try {
// 創(chuàng)建RMI連接客戶端到RMI連接服務(wù)器
JMXServiceURL url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
// 獲得一個MBean服務(wù)器連接
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
//創(chuàng)建一個forPlay類
ObjectName mbeanName = new ObjectName("chengang:name=forReplay");
mbsc.createMBean("forReplay", mbeanName, null, null);
System.out.println("\nMBean數(shù)量為" + mbsc.getMBeanCount());// 獲得Mbean的數(shù)量
mbsc.invoke(mbeanName,"play", null, null);//調(diào)用forPlay類中的play()函數(shù)
Thread.sleep(2000);//掛起2000毫秒,等待服務(wù)器反應(yīng).
mbsc.unregisterMBean(mbeanName); //注銷MBean的注冊,不是必要的
jmxc.close();// 關(guān)閉連接,不是必要的
} catch (Exception e) {
e.printStackTrace();
}
}
}
***********************************************************
***********************************************************