Durante lo sviluppo di uno dei tanti progetti che sto seguendo in questa impegnatissima fase di sviluppo (lavorativa e non), mi sono trovato davanti la necessità di scrivere una libreria RMI in Java che non sfruttasse la tecnologia RMI ufficiale.
Per informazioni riguardo la tecnologia RMI Oracle guardate qui.
RMI
RMI è l'acronimo di Remote Method Invocation (chiamata di metodi remoti). Questa tecnologia rende possibile eseguire funzioni su un oggetto remoto senza possederlo in locale o sfruttare degli application server. La teoria alla base di questa funzionalità è che una applicazione espone uno o più oggetti particolari ad un server il quale si occupa di gestire le richieste dalla rete.Perchè non usare lo standard?
Perchè questa soluzione non è applicabile nel mio caso? Questa soluzione è inefficiente per i seguenti motivi:
- è necessario configurare l'RMI Server sulla macchina su cui viene eseguito l'applicazione. Operazione complessa e che comunque viene resa permanente all'interno del PC.
- è necessario utilizzare oggetti ed interfacce da applicare ai propri oggetti, cosa che non sempre il design del software rende possibile o che comunque compromette la documentazione UML prodotta
La mia visione
Progetto Myrmidon è la "mia visione" di quello che dovrebbe essere la tecnologia RMI e che risponde alle mie personali esigenze, vi consiglio dunque di utilizzare la mia libreria solo ed esclusivamente se condividete con me l'impossibilità di utilizzare la tecnologia RMI standard. Myrmidon (pronunciato mèrmeedon) prende il nome da quello che ho appena detto: My RMI (mio RMI), a cui poi è stato aggiunto il suffisso per richiamare la parola Mirmidone in inglese (esclusivamente per ragioni di marketing con i colleghi).Myrmidon
Myrmidon è una libreria open source scritta in Java. Si compone di due macro oggetti, cuori di questa tecnologia: myrmidon server e myrmidon client. Ogni server espone uno ed un solo oggetto su un server socket configurato (la porta TCP è un parametro del server), il client si occuperà di collegarsi al server ed invocare il metodo remoto, con la possibilità di inviare parametri e ricevere il valore di ritorno di una funzione. Il myrmidon server sfrutta la tecnologia multi-thread per processare più richieste contemporaneamente e sfrutta la synchronization standard Java per evitare problemi di richieste in conflitto.
Come usare Myrmidon
A livello implementativo l'unica cosa che è necessaria per utilizzare questa libreria è inserire un oggetto di tipo MyrmidonServer, associare l'oggetto da esporre e la porta TCP da utilizzare, quindi avviare il server. Lato client è sufficiente creare un oggetto di tipo MyrmidonClient, impostare IP e porta TCP quindi invocare i metodi desiderati. Vediamo insieme un esempio concreto:
Lato Server:
Lato Client:
Lato Server:
[...]
Adder adder = new Adder();
MyrmidonServer server = new MyrmidonServer(adder,9999);
server.start();
[...]
public class Adder{
public int sum(int a, int b){ return a+b; }
}
Lato Client:
[...]
MyrmidonClient client = new MyrmidonClient("127.0.0.1",9999);
int sum = (int)client.invoke("sum",1,2);
System.out.println("output: " + sum);
[...]
output: 3
Open Source
Il codice sorgente è accessibile alla pagina GitHub di Programmazione Applicata sotto la repository Myrmidon.
Nessun commento:
Posta un commento