Sto creando un'applicazione che utilizza ews-java-api per connettersi a un server MS Exchange. Una volta che la connessione è autenticata, l'API impone l'uso di ExchangeService oggetto per la ricerca di cassette postali, recupero di mail e lettura del suo contenuto.
Le e-mail vengono lette da diverse classi lungo la linea per analisi e azioni a seconda del contenuto della posta elettronica. Tutte queste classi devono avere bisogno di un'istanza pre-autenticata dell'oggetto ExchangeService.
L'istanza dell'oggetto è ottenuta come -
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials("emailAddress", "password");
service.setCredentials(credentials);
In futuro potrebbero esserci dei requisiti per aggiungere più classi lungo la linea in base alle esigenze per più funzionalità. Tutti utilizzerebbero la stessa istanza dell'oggetto ExchangeService.
La mia domanda è come dovrei progettare la condivisione dell'istanza di ExchangeService tra tutte queste classi su tutta la linea? Tenendo presente che nessuno dovrebbe inavvertitamente chiamare il metodo "close ()" su quell'istanza, fino al termine di tutta l'applicazione.
A prima vista potrebbe apparire come una sorta di progetto di connessione al database, ma non è così. Questa applicazione viene eseguita periodicamente ogni 5 minuti e si connette al server Exchange, fa il suo lavoro di analisi dei messaggi non letti (con tutte le classi comportamentali) e idealmente dovrebbe chiudere la connessione.
Mi è venuto in mente anche un solo pensiero sul modello singleton, ma il problema di chiamare il metodo "close ()" rimane ancora.
Qualche suggerimento di design per semplificare il sistema?
Grazie in anticipo!