Recentemente mi è capitato di dover configurare un'installazione di Liferay 6.2CE mediante il classico meccanismo dei LAR, leggermente rivisitato e migliorato in questa nuova versione del portale.
Liferay 6.2 introduce infatti il concetto di BackgroundTask, ossia di un processo svincolato dall'interfaccia utente che esegue l'importazione, appunto, in background; in questo modo è possibile avviare l'importazione e poter utilizzare il portale immediatamente mentre il processo elabora.
Questo meccanismo introduce anche una precedenza tra i processi da eseguire: nuovi processi vengono accodati in caso di un'esecuzione già in corso e vengono poi eseguiti in modalità FIFO.
Per garantire il funzionamento di tutto, Liferay scrive alcuni record nelle sue tabelle... e qui nasce il problema che mi si è presentato.
Durante l'importazione del mio LAR, qualcosa è andato storto e dopo più di 2 ore di attesa ancora il processo non era terminato; non avendo ricevuto alcun messaggio di errore o di warning e non vedendo alcun nuovo record nel database, ho deciso di riavviare il portale per tentare una nuova importazione.
Al successivo tentativo di importazione, il processo è stato subito accodato in quanto il sistema vedeva ancora il vecchio processo in esecuzione; evidentemente era rimasto scritto qualcosa in qualche tabella. Ho così annullato l'importazione e mi sono messo a cercare.
Non mi ci è voluto molto a trovare il record del vecchio processo all'interno della tabellabackgroundtask ed ho potuto così cancellarlo a mano e riavviare il portale.
Al successivo tentativo di importazione, il vecchio processo non era effettivamente più in elenco! Peccato che il nuovo processo venisse sempre e comunque accodato...
Dopo un'altra intensa sessione di debug ho trovato dov'era il blocco: c'era un altro record all'interno della tabella lock, che ho prontamente rimosso e tutto si è risolto.
Ricapitolando:
- non riavviate il server durante l'importazione di un LAR
- ma se proprio dovete farlo e poi vi si blocca tutto:
- controllate la tabella backgroundtask
- controllate la tabella lock