57) In cosa consistono gli Object Adapter?
C’è la necessità di utilizzare identificatori tra ambienti diversi.
L’Object Reference permette di utilizzare nomi non unici associati ad un servizio.
ObjectRef possono essere passati da un ambiente all’altro per essere utilizzati dovunque.
Vi è un sistema di nomi che trasla in nomi esterni:
un ObjectRef al passaggio viene convertito in un proxy nell’ambiente del ricevente per poter essere utilizzato. La conoscenza si amplia attraverso le invocazioni e si mantengono Object Reference agli oggetti non locali. Questi riferimenti possono essere passati da un nodo all’altro e mantenersi validi.
Gli Object Adapter (OA) provvedono al binding tra ObjectRef e oggetti associati. Possono esserci più adattatori (es. BOA, OODA), secondo le specifiche necessità.
Basic Object Adapter (BOA): Interfaccia usata per accedere alle funzionalità di ORB
Esporta operazioni per:
L'oggetto deve registrarsi per potere essere attivato dall'ORB.
Il cliente deve essere legato al server: binding al server e invocazione di un metodo proxy.
Il server deve essere attivato e potere decidere come servire le richieste:
il server viene o lanciato inizialmente o lanciato su necessità (e persiste). Problema: costo di attivazione del processo
Modi concorrenti di attivazione nel server:
altre modalità: ad esempio avere una sola attivazione (capacità di risposta) possibile per più oggetti server (shared server) contemporaneamente
Thread-per-request:
si genera un thread per ogni richiesta di servizio.
costo: generazione di un processo per ogni richiesta.
Thread-pool:
ogni oggetto riceve il suo processo da un pool di thread creato inizialmente per la gestione delle richieste di servizio.
in questo caso, è necessario disporre di coda per le richieste e di aggancio alle richieste dei thread esistenti e disponibili.
in caso non ci siano task liberi, o si attende o si prevede una ulteriore generazione.
non c’è il costo iniziale di un thread per ogni richiesta di servizio, ma ci sono problemi in caso di traffico elevato.
Thread-per sessione:
si genera un thread per ogni cliente e questo si incarica di rispondere a tutte le richieste di quel cliente.
una sola richiesta per volta per la stessa sessione.
in questo caso, il thread è unico e viene mantenuto per la intera sessione.
si limita il parallelismo per ogni cliente e non si bilancia il carico.