Sto sviluppando piccole applicazioni Web Java sul server Tomcat e sto usando MySQL come database.
Fino ad ora stavo usando una connessione singleton per accedere al database, ma ho scoperto che questo garantirà solo la connessione per applicazione e ci saranno problemi se più utenti vogliono accedere al database nello stesso tempo. (Tutti devono farci di quel singolo oggetto Connection). Ho creato un Connection Pool
e spero che questo sia il modo corretto di fare le cose.
Inoltre sembra che abbia sviluppato la cattiva abitudine di creare molti oggetti statici e metodi statici (principalmente perché avevo l'impressione sbagliata che ogni oggetto statico sarebbe stato duplicato per ogni client che accede alla mia applicazione).
Per questo motivo tutte le classi di servizi (classi utilizzate per gestire i dati del database) sono statiche e distribuite attraverso un ServiceFactory
:
public class ServiceFactory {
private static final String JDBC = "JDBC";
private static String impl;
private static AccountService accountService;
private static BoardService boardService;
public static AccountService getAccountService(){
initConfig();
if (accountService == null){
if (impl.equalsIgnoreCase(JDBC)){
accountService = new JDBCAccountService();
}
}
return accountService;
}
public static BoardService getBoardService(){
initConfig();
if (boardService == null){
if (impl.equalsIgnoreCase(JDBC)){
boardService = new JDBCBoardService();
}
}
return boardService;
}
private static void initConfig(){
if (StringUtil.isEmpty(impl)){
impl = ConfigUtil.getProperty("service.implementation");
// If the config failed initialize with standard
if (StringUtil.isEmpty(impl)){
impl = JDBC;
}
}
}
Questa era la classe di fabbrica che, come puoi vedere, consente l'esistenza di un solo Servizio in qualsiasi momento. Ora, questa è una cattiva pratica? Cosa succede se diciamo che 1k utente accede a AccountService
contemporaneamente?
So che tutte queste domande e queste cattive pratiche derivano da una cattiva comprensione dell'attributo statico in un'applicazione Web e dal modo in cui il server gestisce questi attributi. Qualsiasi aiuto su questo argomento sarebbe più che gradito. Grazie per il tuo tempo!