Post

Visualizzazione dei post con l'etichetta hibernate

Hibernate e Tomcat out of memory

Immagine
DOMANDA: Sto utilizzando Hibernate sulla mia web application. Dopo un po' che navigo ed effettuo query, il server Tomcat 7 smette di funzionare e ricevo questo errore: java.lang.OutOfMemoryError: PermGen space         at java.lang.ClassLoader.defineClass1(Native Method)         at java.lang.ClassLoader.defineClass(ClassLoader.java:620)         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) Come posso risolverlo? RISPOSTA: L'accoppiata Tomcat e Hibernate funziona molto bene, ma, come tutti i  framework/applicazioni installati sul web server  richiede alcune piccole configurazioni per settare tutto al meglio. Come impostazione predefinita, Tomcat assegna pochissima memoria per i processi in esecuzione. E' proprio quello il problema, poca memoria a disposizione e il nostro framework (in questo caso Hibernate ) ne richiede di più. Vediamo come aumentarla. In Linux : 1. Cerchiamo il file catalina.sh nella carte

Hibernate: differenza session.get() e session.load()

DOMANDA: Qual è la differenza in Hibernate tra l'utilizzo di session.get(...) e session.load(...)? RISPOSTA: In Hibernate ci sono due metodi per recuperare gli oggetti: GET: Utente utente = ( Utente ) session . get ( Utente . class , idUtente ); Il metodo get() carica l'oggetto accedendo al database (se non è già presente un'istanza nella cache con lo stesso id) per valorizzarne gli attributi. Qualora non ci fosse nessuna corrispondenza, il metodo restituisce null. LOAD: Utente utente = ( Utente ) session . load ( Utente . class , idUtente ); Il metodo load() restituisce invece un'istanza del proxy di riferimento all'oggetto in questione (nel nostro caso Utente) senza accedere al database (viene valorizzato solo il campo id quindi). Solo quando si accede all'oggetto con i suoi metodi viene eseguito l'accesso al database (se non è già presente l'oggetto in cache). Questo metodo si comporta, nella pratica, co