ToMove2017 / Esercitazione03

Esercitazione 03 del corso di Applicazioni Internet
MIT License
0 stars 0 forks source link

Valutazione prestazioni #2

Closed aleciav closed 7 years ago

aleciav commented 7 years ago

Nel momento in cui si visualizza il percorso di una linea viene generata l'eccezione org.hibernate.LazyInitializationException. Sostanzialmente il problema è che ci sono due modalità per caricare le tabelle:

Usando la prima modalità se si prova ad accedere ad una collezione viene generata quell'eccezione perchè si impiega troppo tempo e la sessione col db viene chiusa prima perchè scaduta. Con la seconda modalità invece nessun problema a parte un calo delle prestazione nella visualizzazione della pagina con la mappa e il percorso della linea scelta. Per risolvere il problema ho settato la modalità EAGER.

Qui viene spiegato in dettaglio il perchè e come risolvere: http://stackoverflow.com/questions/11746499/solve-failed-to-lazily-initialize-a-collection-of-role-exception

Sarebbe utile testare su altri PC per vedere se succede lo stesso oppure no.

MartinoMensio commented 7 years ago

Ho provato entrambe le modalità (per testare la LAZY ho rimosso dalle due entity il fetch) ed in effetti le pagine tipo http://localhost:8080/PathFinder/showbusLineStops?lineId=19 generano l'eccezione failed to lazily initialize a collection of role: it.polito.ai.lab3.repo.entities.BusLine.stops, could not initialize proxy - no Session che in effetti è dovuta al fatto che il la sessione viene generata e chiusa attorno alla chiamata al servizio (che è annotato con transactional), mentre la lettura della busStopList a riga 55 di MapPageController avviene all'esterno della transazione.

Come soluzione direi che va bene mettere EAGER per ora, dato che la risoluzione alternativa potrebbe essere spostare la lettura delle stop nel servizio, ma richiederebbe la riscrittura di alcuni metodi