OCS - Corba - default servant
Napsal: 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:
RepInterface ma metodu rekneme getName(). V ni musim zjistit ID objektu a podle toho vratit prislusne jmeno.
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:
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;
}
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();
}
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();