OCS - Corba - default servant

Každý neuvedený předmět
melda
Matfyz(ák|ačka) level I
Příspěvky: 13
Registrován: 29. 5. 2006 17:56

OCS - Corba - default servant

Příspěvek od melda »

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();
Odpovědět

Zpět na „Ostatní“