bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Liferay 6.1.0 GA1 e StackOverflowError

Liferay mette da tempo a disposizione degli sviluppatori un comodo plugin di Eclipse (www.liferay.com/community/wiki/-/wiki/Main/Liferay+IDE) per gestire tutte le configurazioni ed i deploy; il suo utilizzo consente infatti di creare nuovi progetti (portlet, temi, ...) all'interno del proprio workspace e di deployarli direttamente nel server interno censito in Eclipse, dando la possibilità di gestire proficuamente hot code deploy, debug, ..., senza l'ausilio dello script Ant.

Recentemente ho lavorato per un progetto sulla versione di Liferay 6.1.0 GA1 (Community Edition), secondo le modalità sopra, senza avere troppi problemi imprevisti.

Arrivati ad un certo punto dello sviluppo il server ha iniziato a sollevare inspiegabili eccezioni di tipo StackOverflowError in seguito a qualsiasi tipo di interazione con le portlet custom che erano state sviluppate; di fatto era diventato inutilizzabile.

Dopo alcune prove e ricerche ho scoperto che il problema erano gli hook, nello specifico la presenza del file liferay-hook.xml all'interno del mio progetto custom; non potendo rimuovere il file (necessario all'applicazione), l'unica soluzione è stata quella di rimuovere il mio progetto dal server interno di Eclipse e di ripristinare l'utilizzo dello script Ant. Avvio ed arresto del server rimangono comunque all'interno di Eclipse.

In conclusione esiste un bug all'interno di una classe di Liferay adibita al deploy che genera questo malfunzionamento; il bug è documentato qui, http://issues.liferay.com/browse/LPS-24723, ed è stato risolto già a partire con il rilascio della versione 6.1.1 GA2.

Enjoy!

Precedente
Commenti
Aggiungi Commento
Marco Napolitano
Le portlet Struts sono ormai deprecate, bisogna usare la classe MVCPortlet.
Facendo un hook di una JSP non fai altro che sovrascrivere un file di portale, ma eseguire una classe Java che il portale non conosce è un altro discorso; c'è un problema di classloading.
Inviato il 09/07/15 14.02 in risposta a Simona Cambo.
Simona Cambo
Ti capisco in parte, scusami, nel senso che ok che sono deprecate le portlet Struts, ma se opero come ha fatto anche in precedenza per l'upload, ho problemi? Il problema di classloading è causato dal fatto che le classi inserite nell'hook non essendo presenti nel portale, non funzionano? Quando parli di portale ti riferisci al ROOT? Scusami se ti faccio queste domande banali, ma ho bisogno di capire perchè sto iniziando da poco a utilizzare Liferay
Inviato il 09/07/15 14.02 in risposta a Marco Napolitano.
Marco Napolitano
Se hai già provato con le portlet Struts e funziona, riprova allo stesso modo.
Male che vada c'è la portlet custom.
Cmq le classi di portale sono quelle di Liferay, non le tue; quindi in un certo senso ROOT.
Inviato il 09/07/15 14.02 in risposta a Simona Cambo.
Simona Cambo
Sto avendo difficoltà a scrivere nella jsp il link. Inoltre come devo scrivere nel tag <portlet:resourceURL>, in maniera tale che Liferay capisca che deve andare nel metodo processAction della classe java che mi sono costruito? Aggiungo <portlet:param name"struts_action" value="....">? E poi devo scrivere nel LIFERAY-HOOK.XML il mapping?

Nel caso dell'upload ho fatto come segue e funziona:

nella JSP
<%String taglibOnSubmit = "event.preventDefault(); " + renderResponse.getNamespace() + "uploadUtenti();";%>

<aui:form method="post" name="fm" enctype="multipart/form-data" onSubmit="<%= taglibOnSubmit %>">
<aui:input type="file" id="filename" name="fileName" size="75"/>
<input type="submit" value="<liferay-ui:message key="upload" />" onClick="<%= uploadProgressId %>.startProgress(); return true;"/>
</aui:form>

<aui:script>
function <portlet:namespace />uploadUtenti() {
submitForm(document.<portlet:namespace />fm, "<portlet:actionURL><portlet:param name="struts_action" value="/users_admin/pippo" /></portlet:actionURL>");
}
</aui:script>

nel file LIFERAY-HOOK.XML
<struts-action>
<struts-action-path>/users_admin/pippo</struts-action-path>
<struts-action-impl>it.exprivia.kbms.action.usersimport.UsersUpload</struts-action-impl>
</struts-action>


NELLA CLASSE JAVA
public class UsersUpload extends BaseStrutsPortletAction {

@Override
public void processAction(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {

System.out.println("Sono nel metodo processAction");

.......

Grazie per le risposte che mi dai, mi sei stato di aiuto per fugare un pò di dubbi.
Inviato il 09/07/15 14.02 in risposta a Marco Napolitano.
Simona Cambo
Buongiorno Marco!
poi alla fine ieri sera sono riuscita a far funzionare tutto quanto il giro. Ti ringrazio per le tue risposte chiarificatrici.
Inviato il 09/07/15 14.02 in risposta a Simona Cambo.