首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Corba非阻塞orb

Corba非阻塞orb
EN

Stack Overflow用户
提问于 2011-03-23 04:52:28
回答 3查看 1.1K关注 0票数 0

我正在尝试做一个用java实现的Corba程序,它同时是另一个java程序的服务器和另一个java程序的客户端,所以我需要一个可以在单独的线程中运行的非阻塞orb (我在我的类Orb_run中有它):但是我在实例化Orb_run时遇到了一个问题,我必须提供一个ORB对象,但是如果我在orb上调用初始化方法,它将创建一个新的块对象。这是我的服务器的代码。

代码语言:javascript
复制
public class machine {                                                                         
static int uid = 1;               
etat_machine etat;
static ORB  orb;   
static int token_uid  = 1;                                                                                                        


static void server(String[] args, int uid, int token_uid){         
   try {        
    //Instanciate Orb obj
    //orb = ORB.init(args, null); 

    //Instancier Orb_run
    Orb_Run orb_run = new Orb_Run(orb);

    POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
    poa.the_POAManager().activate();    

    machineImpl machine = new machineImpl(poa, uid, jeton_uid);        

    // create the object reference
    org.omg.CORBA.Object mach = poa.servant_to_reference(machine);

    try {
            String m1_ref = orb.object_to_string(mach);
            String refFile = "m1.ref";
            PrintWriter out = new PrintWriter(new FileOutputStream(refFile));
            out.println(m1_ref);
            out.close();
            } 
        catch (IOException ex) {
                System.err.println(
                        "Impossible d'ecrire la reference dans m1.ref");
                System.exit(1);
            }

        System.out.println("Le serveur m1 est pret ");

        // wait for requests
        orb_run.run();

    System.exit(0);
    }
    catch (Exception e) {
        System.out.println(e);
    }    

  //Client
  public static int client(int token_uid){

    orb.init(); 
   // Orb_Run orb_run = new Orb_Run(orb);
     String ior = null;

        try {
            String ref = "m2.ref";
            FileInputStream file = new FileInputStream(ref);
            BufferedReader in = new BufferedReader(new InputStreamReader(file));
            ior = in.readLine();
            file.close();
        } catch (IOException ex) {
            System.err.println("Impossible de lire fichier : '" +
            ex.getMessage() + "'");
            System.exit(1);
        }


        org.omg.CORBA.Object obj = orb.string_to_object(ior);

        if (obj == null) {
            System.err.println("Erreur sur string_to_object() ");
            throw new RuntimeException();
        }

 machine machine = machineHelper.narrow(obj); 

        if (machine == null) {
            System.err.println("Erreur sur narrow() ");
            throw new RuntimeException();
        }


        System.out.println("avant appel traitement_message ");

        jeton_uid = machine.traitement_message();

        System.out.println("le uid ds le jeton mnt"+ jeton_uid);

        return jeton_uid;
    }

}

我正在使用这个类在一个单独的线程中启动一个非阻塞orb:

代码语言:javascript
复制
 public class Orb_Run extends Thread {

    public ORB  orb_;

   public Orb_Run(ORB  o) {
       orb_=o;
   }                                             
   public void run() {
      System.out.println("Le serveur est pret");
      orb_.run();
   }    }                                                                                      }

因此,如果你有一些关于如何做到这一点的提示,那将是很棒的。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-23 07:50:32

我不知道使用Java中的标准API启动非阻塞ORB的任何方法。您是否可以生成一个新线程来运行ORB,然后继续在主线程中工作?或者为客户端工作生成工作线程,并使用ORB的主线程?

票数 1
EN

Stack Overflow用户

发布于 2015-01-02 10:58:23

只是不要执行orb_run.run();

由于此方法用于阻塞当前线程...

票数 1
EN

Stack Overflow用户

发布于 2014-12-24 01:23:54

在Java7中,ORB.run()方法实际上执行无限等待;工作线程独立于ORB.run()运行。所以根本不需要调用它,你就有了一个优秀的非阻塞ORB。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5397697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档