2012-11-28 32 views
0

當我使用下面的類對象「bd」作爲參數的方法時,我的客戶端停止工作,雖然我成功地使用了偵聽器對象。 「標記爲粗體」 注意到,當我嘗試使用另一種方法時,例如任何pramater「STring」都可以成功運行。CORBA客戶端停止或掛起沒有錯誤

import java.util.Properties; 
     import org.omg.CORBA.ORB; 
     import org.omg.PortableServer.POA; 
     import org.omg.PortableServer.POAHelper; 
     import org.omg.CosNaming.NameComponent; 
     import org.omg.CosNaming.NamingContext; 
     import org.omg.CosNaming.NamingContextHelper; 

     public class BackupDaemonMain { 

      public static void main(String[] args) { 
      try { 

        //initialize orb 
        Properties props = System.getProperties(); 
        props.put("org.omg.CORBA.ORBInitialPort", "1050"); 
        //Replace MyHost with the name of the host on which you are running the server 
        props.put("org.omg.CORBA.ORBInitialHost", "localhost"); 
        ORB orb = ORB.init(args, props); 
       System.out.println("Initialized ORB"); 

        //Instantiate Servant and create reference 
       POA rootPOA = POAHelper.narrow(
       orb.resolve_initial_references("RootPOA")); 

        MessageListenerImpl listener = new MessageListenerImpl(); 
        BackupDaemonImpl bdImpl=new BackupDaemonImpl(); 
        // bdImpl.backupDaemonUser("Yarab"); 
        rootPOA.activate_object(listener); 
        rootPOA.activate_object(bdImpl); 
        MessageListener ref = MessageListenerHelper.narrow(
         rootPOA.servant_to_reference(listener)); 
         **BackupDaemon bd = BackupDaemonHelper.narrow(
         rootPOA.servant_to_reference(bdImpl));** 
         System.out.println("After rootPOA.servant_to_reference(bdImpl)); "); 

        //Resolve MessageServer 
       MessageServer msgServer = MessageServerHelper.narrow(
       orb.string_to_object("corbaname:iiop:[email protected]:1050#MessageServer")); 
      BackupServer bdServer=BackupServerHelper.narrow(
       orb.string_to_object("corbaname:iiop:[email protected]:1050#BackupServer")); 
        //Register listener reference (callback object) with MessageServer 
       /* if(bd==null) 
         { 
         System.out.println("Null"); 
         } 
         else 
         { 
         System.out.println("Not Null With " + bd.backupDaemonUser()); 
         }*/ 
        // bd.backupDaemonMacAddress("YYYYYYYYYY"); 
     System.out.println("Initialized ORB +++++++++++++++++++++++ "); 
      msgServer.register(ref); 
     **bdServer.registerBackupDaemon(bd);** 
       System.out.println("Initialized ORB +++++++++++++++++++++++)))))))))"); 
        //System.out.println("I am Here" + 
        //bd.deleteBackup("00000000000","asdas");//); 
        System.out.println("Initialized ORB +++++++++++++++++++++++ _____________________________"); 
        System.out.println("Listener registered with MessageServer With User :- "); 
        System.out.println("Backup Daemon registered with BackupServer With User :- "); 

       //Activate rootpoa 
        rootPOA.the_POAManager().activate(); 

        //Wait for messages 
        System.out.println("Wait for incoming messages"); 
        orb.run(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      } 
     } 

服務器實現

// BackupServerImpl.java 

import java.util.Enumeration; 
import java.util.Vector; 
import org.omg.CosNaming.*; 
import org.omg.CosNaming.NamingContextPackage.*; 
import org.omg.CORBA.*; 
import org.omg.PortableServer.*; 
import org.omg.PortableServer.POA; 

import java.util.Properties; 
// import util.CORBAAlgorithms; 

    public class BackupServerImpl extends BackupServerPOA { 
    private ORB orb; 

    public void setORB(ORB orb_val){ 
    orb = orb_val; 
    } 

    public String sayHello(){ 
    return "\nHello world !!\n"; 
    } 

    public void shutdown(){ 
    orb.shutdown(false); 
    } 
     // This BankServer's list of Banks. 
     private Vector myBackups; 
    public BackupServerImpl() 
    { 
    //super("In Impl"); 
     System.out.println("\n \t @ Constructor of Server"); 

     } 


     public BackupServerImpl(String name) { 

     // super(name); 

      myBackups = new Vector(); 

     } 

     public boolean registerBackupDaemon(BackupDaemon bd) throws InvalidBackupDaemonException 
       { 

       System.out.println("\n \t Backup Agent Registration With User" + bd.backupDaemonUser()); 
     return true; 
     } 

     public boolean unRegisterBackupDaemon(String backupDaemonMacAddress) throws 
       InvalidBackupDaemonException { 
      System.out.println("Backup Daemon Un-Registration With Mac " + backupDaemonMacAddress); 
      return true; 
     } 

     public BackupDaemon[] getBackupDeamons() { 

      BackupDaemon[] list = new BackupDaemon[myBackups.size()]; 
      myBackups.copyInto(list); 

      Enumeration e = myBackups.elements(); 
      while (e.hasMoreElements()) { 
       ((BackupDaemon)e.nextElement())._duplicate(); 
      } 

      return list; 
     } 


} 
+0

如果有任何需要幫助的細節,我會很高興。 –

+0

請發佈'BackupDaemonImpl'實現。 – tuergeist

回答

0

你可能已經錯過了名稱服務在我們的網址

corbaname:iiop:[email protected]:1050/NameService#BackupServer 

bdServer的調用也可以掛在遠程站點上...

+0

這已經定義爲先生。在此先感謝 –

+0

什麼是定義。該呼叫在遠程站點上如何實現? – tuergeist

+0

BackupServer bdServer = BackupServerHelper.narrow( orb.string_to_object(「corbaname:iiop:[email protected]:1050#BackupServer」)); –

0

您的runorg.omg.CORBA.ORB方法塊當前線程。你應該在一個單獨的線程中啓動它。請參閱javadoc。運行你的ORB如

Thread orbThread = new Thread("Orb Thread") { 

    public void run() { 
    orb.run();  
    } 
}; 

orbThread.start();