2012-10-03 38 views
0

我有以下的服務器類導出自己的JRMP和IIOP:製作一個Java雙出口服務器守護程序

public class FooServer implements RemoteInt{ 
    FooServer(){ 
     UnicastRemoteObject.exportObject(this); 
     PortableRemoteObject.exportObject(this); 
    } 

    public boolean remoteMethod() throws RemoteException{ 
     // some stuff 
     return false; 
    } 
} 

和創建服務器以下設置類,並將其註冊到正在運行的寄存器:

public class Setup{ 
    public static void main(String[] args){ 
     RemoteInt serv = new FooServer(); 
     Naming.rebind("//localhost/server", this); 
    } 
} 

問題是,當安裝程序完成其作業時,它將等待FooServer終止。相反,我想退出安裝程序類,使FooServer運行。 我該怎麼辦?

+0

您是否指示'exportObject(this)'調用之一沒有返回(即因爲它阻塞了等待輸入的套接字),或者'main'退出但應用程序繼續運行? – noahlz

+0

就像EJP說的那樣,主要退出但應用程序繼續運行,因爲有線程監聽連接。 – Alessio

+0

「我想退出安裝課。」如上所述,這正是發生的情況。 – noahlz

回答

0

你不行。遠程對象從當前JVM中導出,並保持運行狀態直到您取消導出爲止。請注意,main()方法會退出,但RMI/JRMP和RMi/IIOP偵聽線程仍在運行,因此JVM不會退出。

+0

那麼,我正在尋找一種方法來做到這一點,可能以某種方式使用Thread.setDaemon(bool)方法或其他方法。 – Alessio

+0

@Alessio「你不能」的哪部分你不明白?如果JVM退出,則遠程對象將不再存在。他們需要JVM運行。你似乎認爲它們突然間存在於一個平行的宇宙中。他們不。 – EJP

+0

我正在考慮從安裝程序爲服務器產生一個新的JVM。 – Alessio