一個JNDI context lookup的問題,望高手不吝賜教!!!
本人寫了這樣一個RMI-IIOP程式,為測試一下如下功能:
使用者輸入幾個IP地址,從這裡面查詢哪些Server端當前可用,哪些不可用。
//Server.java
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Server extends PortableRemoteObject implements RMIInterface {
public Server() throws RemoteException {
}
// implementation of RMIInterface methods
public String showWelcome() throws RemoteException {
return "Welcome!!!";
}
public static void main(String[] args) {
try {
Hashtable env=new Hashtable();
env.put("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");
env.put("java.naming.provider.url","iiop://localhost:1050");
Server s = new Server();
// create the naming context
Context initialNamingContext = new InitialContext(env);
initialNamingContext.rebind("Server", s );
System.out.println("Server waiting...");
} catch (Exception e) {
e.printStackTrace();
}
}
//Client.java
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.*;
public class Client {
static Hashtable env[] = new Hashtable[4];
static int i=0;
public static void search(Hashtable env1){
try{
SerClass se = new SerClass(env1.toString());
// get the naming context
Context ic = new InitialContext(env1);
// get a reference to the remote object
Object objRef = ic.lookup("Server");
ic.close() ;
// narrow it into our RMIInterface
RMIInterface ri =
(RMIInterface) PortableRemoteObject.narrow(objRef, RMIInterface.class);
//invoke RMIInterface method
System.out.println("Recieved from server: " + ri.showWelcome() + "\n");
// display agent is valid or invalid
System.out.println("Valid Agent:" + se.getIp() + "\n");
}
catch (Exception e) {
System.out.println("invalid Agent");
}
finally{
if(i<3)
search(env[++i]);
}
}
public static void main(String[] args) {
for(int n=0;n<args.length ;n++){
env[n]=new Hashtable();
env[n].put("java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
env[n].put("java.naming.provider.url", "iiop://" + args[n] + ":1050");
}
search(env[0]);
}
}
當前採用的方法是不管Server端開不開服務都嘗試連線一下,如果連上了就顯示valid agent;若產生異常則說明是invalid。
現在的問題是:在連線不可用的Server時要過比較長的時間才能顯示出invalid agent,不知是不是有設定lookup timeout的方法或者採取另一種更好的機制來實現查詢Server端可用性的方法。望高手不吝賜教!!!
使用者輸入幾個IP地址,從這裡面查詢哪些Server端當前可用,哪些不可用。
//Server.java
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Server extends PortableRemoteObject implements RMIInterface {
public Server() throws RemoteException {
}
// implementation of RMIInterface methods
public String showWelcome() throws RemoteException {
return "Welcome!!!";
}
public static void main(String[] args) {
try {
Hashtable env=new Hashtable();
env.put("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");
env.put("java.naming.provider.url","iiop://localhost:1050");
Server s = new Server();
// create the naming context
Context initialNamingContext = new InitialContext(env);
initialNamingContext.rebind("Server", s );
System.out.println("Server waiting...");
} catch (Exception e) {
e.printStackTrace();
}
}
//Client.java
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.*;
public class Client {
static Hashtable env[] = new Hashtable[4];
static int i=0;
public static void search(Hashtable env1){
try{
SerClass se = new SerClass(env1.toString());
// get the naming context
Context ic = new InitialContext(env1);
// get a reference to the remote object
Object objRef = ic.lookup("Server");
ic.close() ;
// narrow it into our RMIInterface
RMIInterface ri =
(RMIInterface) PortableRemoteObject.narrow(objRef, RMIInterface.class);
//invoke RMIInterface method
System.out.println("Recieved from server: " + ri.showWelcome() + "\n");
// display agent is valid or invalid
System.out.println("Valid Agent:" + se.getIp() + "\n");
}
catch (Exception e) {
System.out.println("invalid Agent");
}
finally{
if(i<3)
search(env[++i]);
}
}
public static void main(String[] args) {
for(int n=0;n<args.length ;n++){
env[n]=new Hashtable();
env[n].put("java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
env[n].put("java.naming.provider.url", "iiop://" + args[n] + ":1050");
}
search(env[0]);
}
}
當前採用的方法是不管Server端開不開服務都嘗試連線一下,如果連上了就顯示valid agent;若產生異常則說明是invalid。
現在的問題是:在連線不可用的Server時要過比較長的時間才能顯示出invalid agent,不知是不是有設定lookup timeout的方法或者採取另一種更好的機制來實現查詢Server端可用性的方法。望高手不吝賜教!!!
相關文章
- 請教一個問題,
- 請教一個struct tag的問題Struct
- 請教一個go切片引用的問題Go
- 請教一個演算法問題演算法
- 請教一個 python 包安裝的問題Python
- 請教一個切片遞迴賦值的問題遞迴賦值
- 請教個問題執行 httprunner 遇到的問題HTTP
- 請教一個讓我這個菜雞不解的問題
- appium 自動化中關於斷言問題,有沒有更好的斷言方法,求大神賜教!APP
- 熟悉個jndi的概念
- 想請教一下各位一個介面寫法問題
- 面對一個Bug,高手程式設計師是如何解決問題的?程式設計師
- 請教各位一個關於websocket協議開發的問題Web協議
- 請教一個關於不確定條件個數搜尋的問題
- 請教各位大佬一個問題,flutter APP 怎麼抓包呢?FlutterAPP
- 請教phpword問題PHP
- skywalking-agent 自定義外掛的幾個問題想請教一下
- 關於heroku的lookup api.heroku.com on 127.0.1.1:53問題解決API
- 請問一個 authorize的問題
- 請教Beego Router 問題Go
- 一個有趣的this指向問題
- 一個有趣的鎖問題
- MySQL:一個特殊的問題MySql
- 最近思考的一個問題
- JNDI注入和JNDI注入Bypass
- 如何向大牛請教問題?
- Proxy Authorization Required 問題請教UI
- 請教 TensorFlow 安裝問題
- 思考一個問題
- 一個小問題
- 請教一個關於 STF 依賴的 node 與 Appium 依賴的 node 版本衝突問題APP
- 請教您關於 Nginx 下多個 Laravel 專案的部署問題NginxLaravel
- 寓教於樂!一款遊戲讓你成為 Vim 高手!遊戲
- 一個“一筆畫”問題的求解器
- 請教一下,UI 自動化選型問題UI
- 請教一個技術問題,又沒有人遇到過這樣的需求?求分享解決方案
- 發現一個問題
- 記錄一個問題
- [提問交流]求大神幫忙看一下,本人新手還在學習,遇到一個問題,想請教一下!!