OCS - Corba - default servant

Každý neuvedený předmět

OCS - Corba - default servant

Příspěvekod melda » 2. 1. 2009 16:42

Hi,

mam takovy problem s Corbou. Mame za ukol vytvorit nad urcitou databazi servanta, ktery nebude vytvaret kazdemu objektu z db servanta, nybrz to vse obstara sam. (Mozna volim spatna oznaceni, z kodu to snad bude jasnejsi)

Metoda vracejici objekty:
Kód: Vybrat vše
public RepInterface[] getInterfaces() {
      
      EList<IDLInterface> ms = getMod().getInterfaces();
      RepInterface[] ret = new RepInterface[ms.size()];
      int i = 0;
      for (IDLInterface m : ms) {
         int id = m.hashCode();
         byte[] b = new byte[4];
         b[0] = (byte)((id >>> 0 ) & 255);
         b[1] = (byte)((id >>> 8 ) & 255);
         b[2] = (byte)((id >>> 16 ) & 255);
         b[3] = (byte)((id >>> 24 ) & 255);
         ret[i++] = RepInterfaceHelper.narrow(_poa().create_reference_with_id(b, "IDL:repository/RepInterface:1.0"));
      }      
      return ret;
   }


RepInterface ma metodu rekneme getName(). V ni musim zjistit ID objektu a podle toho vratit prislusne jmeno.

Kód: Vybrat vše
private String getName()
   {
      int id = 0;
      try {
         POA p = _poa();

         byte[] buf = p.reference_to_id(_this_object());
         id = buf[0] + (buf[1] << 8) + (buf[2] << 16) + (buf[3] << 24);
         
      } catch (Exception e) {
         e.printStackTrace();
      }
      IDLInterface m = DB.getInterface(id);
      return m.getName();
   }


A ted k problemu, do promenne buf dostanu vzdy stejne ID nezavisle na tom, metodu ktereho objektu volam. V cem by mohl byt problem?

Tady je inicializace serveru:
Kód: Vybrat vše
  ORB orb = ORB.init(args, null);
          
           POA rootPoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
          rootPoa.the_POAManager().activate();

           Policy poaPolicy[] = new Policy[] {
                rootPoa.create_id_assignment_policy(                              IdAssignmentPolicyValue.USER_ID),
       rootPoa.create_servant_retention_policy(                              ServantRetentionPolicyValue.NON_RETAIN),
       rootPoa.create_request_processing_policy(                              RequestProcessingPolicyValue.USE_DEFAULT_SERVANT),
           };
                     
          POA poa = rootPoa.create_POA("NECO", rootPoa.the_POAManager(), poaPolicy);
          poa.set_servant(new RepModuleImpl());
          
           RegistryServerImpl rsi = new RegistryServerImpl(poa);   
           PrintWriter pw = new PrintWriter(new FileWriter(args[0]));          
           pw.println(orb.object_to_string(rootPoa.servant_to_reference(rsi)));
   
           pw.flush();
           pw.close();
           orb.run();
melda
Matfyz(ák|ačka) level I
 
Příspěvky: 13
Registrován: 29. 5. 2006 16:56

Zpět na Ostatní

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník