PDA

View Full Version : [JAVA] [Hibernate] [Servlet] - Servlet execution threw an exception


nucce
08-02-2008, 19:16
salve a tutti...
mi stò avvicinando (tutto di un botto - lo so che si deve fare un passo alla volta, ma per motivi universitari devo cercare di fare tutto insieme per mancanza di tempo) al framework "Hibernate" e per prendere familiarità ho eseguito l'esempio presente sull'articolo "Introduzione ad Hibernate" (http://java.html.it/articoli/leggi/2421/introduzione-ad-hibernate/1/) e ho riportato il codice della Classe usata per testare la persistenza del javabean Persona nella seguente servlet:


package test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import beans.Persona;

public class PersonaUnitTest extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
{
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
public PersonaUnitTest()
{
super();
}

/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//System.out.println("Persona Unit Test");

// Recupero la sessione: attenzione, questa operazione
// può essere gestita come un Singleton lungo tutta l'applicazione


org.hibernate.Session session =
new Configuration().configure().buildSessionFactory().getCurrentSession();

//Creo una nuova persona
Persona p = new Persona();
p.setNome("Pasquale");
p.setNome("Congiustì");
p.setEmail("[email protected]");

//Utilizziamo un modello transazionale dichiarativo
session.beginTransaction();

//Chiedo al middleware di salvare questo oggetto nel database
session.save(p);

//fine della transazione: salviamo tramite commit()
session.getTransaction().commit();

//System.out.println("I dati inseriti sono:");
//System.out.println("Nome: " + p.getNome());
//System.out.println("Cognome: " + p.getCognome());
//System.out.println("E-Mail: " + p.getEmail());

RequestDispatcher dispatcher;
dispatcher = getServletContext().getRequestDispatcher("/ShowUser.jsp");
dispatcher.forward(request,response);

}

/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.doGet(request, response);
}
}


ho creato una web application con eclipse che si presenta così:
c'è una pagina html (index.html) che richiama tramite una form la servlet "PersonaUnitTest" che dopo aver effettuato l'inserimento ne db fa un forward alla pagina "ShowUser.jsp" che non fa altro che scrive un messaggio di conferma

il punto è che quando eseguo l'application mi esce questo errore:

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: org/dom4j/DocumentException
test.PersonaUnitTest.doGet(PersonaUnitTest.java:44)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


cosa può essere?...un problema con Hibernate o con la Servlet?

scusate la domanda che forse è stupida ma sono i mie primi "esperimenti" sia con le Servlet che con hibrnate

un infinito grazie a chi mi rispondera!!!! :sofico:

vladix
08-02-2008, 21:04
io ho provato il tuo stesso pezzo di codice e a me funziona benissimo , nn sono il + esperto .... ma di sicuro quel errore lo lancia quando cerchi di istanziare una classe che nn trova , quindi controlla se hai importato tutte le librerie ,cmq ti consiglio caldamente di leggere il "manuale ufficiale" di hibernate invecce della guida su html.it , ( almeno i primi capitoli che parlano della configurazione) :read:

nucce
09-02-2008, 09:44
ok grazie mille!!!...lo farò di sicuro!!!

dupa
10-02-2008, 12:53
sì quell'errore di solito si interpreta con la mancanza di un .jar

nucce
10-02-2008, 15:22
mi sa che non ho importato in modo corretto la libreria di hibernate con eclipse!...grazie a entrambi! quantomeno ora so che è solo un problema di importazione di librerie e non di codice!

nucce
27-02-2008, 11:17
sono ancora qui a rompere su Hibernate...ho letto la documentazione di Hibernate core (http://www.hibernate.org/elqNow/elqRedir.htm?ref=http://www.hibernate.org/hib_docs/v3/reference/en/pdf/hibernate_reference.pdf) ma non riesco comunque a mappare le associazioni tra tabelle...ho questo schema:


_____________ ___________
| | | | _________________
| CUSTOMER | | ORDER | | | ____________
|_____________| |___________| | ORDER_MANAGER | | |
| | | | |_________________| | ADMIN |
| *ID | <--> | CUSTOMER | | | |____________|
| NAME | | *ID | <--> | *ORDER | | NICKNAME |
| ADDRESS | |___________| | *ADMIN | <--> | *ID |
|_____________| |_________________| | EMAIL |
|____________|



l'entità "Order" l'ho mappata nel seguente modo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="beans.Order" table="order">

<id name="id" column="id">
<generator class="identity"/>
</id>

<property name="notes"/>

<set name="customer" table="customer">
<key column="id"/>
<element type="integer" column="id"/>
</set>

</class>
</hibernate-mapping>


solo che quando avvio l'applicazione di prova (che inserisce dei dati nella tabella "order") mi esce questo messaggio di errore:

org.hibernate.MappingException: Repeated column in mapping for collection: beans.Order.customer column: id
org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:306)
org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:329)
org.hibernate.mapping.Collection.validate(Collection.java:286)
org.hibernate.mapping.Set.validate(Set.java:19)
org.hibernate.cfg.Configuration.validate(Configuration.java:1106)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
test.OrderTest.doGet(OrderTest.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


sulla documentazione mi pare di aver capito che la mia situazione si mappa così!...cosa sbaglio?...se cambiassi l'attributo "id" di customer in "idCustomer" il problema si risolve?

Grazie 1000 per l'aiuto!!!

dupa
27-02-2008, 15:38
sono ancora qui a rompere su Hibernate...ho letto la documentazione di Hibernate core (http://www.hibernate.org/elqNow/elqRedir.htm?ref=http://www.hibernate.org/hib_docs/v3/reference/en/pdf/hibernate_reference.pdf) ma non riesco comunque a mappare le associazioni tra tabelle...ho questo schema:


_____________ ___________
| | | | _________________
| CUSTOMER | | ORDER | | | ____________
|_____________| |___________| | ORDER_MANAGER | | |
| | | | |_________________| | ADMIN |
| *ID | <--> | CUSTOMER | | | |____________|
| NAME | | *ID | <--> | *ORDER | | NICKNAME |
| ADDRESS | |___________| | *ADMIN | <--> | *ID |
|_____________| |_________________| | EMAIL |
|____________|



l'entità "Order" l'ho mappata nel seguente modo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="beans.Order" table="order">

<id name="id" column="id">
<generator class="identity"/>
</id>

<property name="notes"/>

<set name="customer" table="customer">
<key column="id"/>
<element type="integer" column="id"/>
</set>

</class>
</hibernate-mapping>


solo che quando avvio l'applicazione di prova (che inserisce dei dati nella tabella "order") mi esce questo messaggio di errore:

org.hibernate.MappingException: Repeated column in mapping for collection: beans.Order.customer column: id
org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:306)
org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:329)
org.hibernate.mapping.Collection.validate(Collection.java:286)
org.hibernate.mapping.Set.validate(Set.java:19)
org.hibernate.cfg.Configuration.validate(Configuration.java:1106)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
test.OrderTest.doGet(OrderTest.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


sulla documentazione mi pare di aver capito che la mia situazione si mappa così!...cosa sbaglio?...se cambiassi l'attributo "id" di customer in "idCustomer" il problema si risolve?

Grazie 1000 per l'aiuto!!!
credo sia dovuto al fatto che sulla stessa tabella stai cercando di usare gli stessi nomi di colonna, nn so che versione usi, cmq puoi anche evitare di dover dare tu a mano i nomi di colonna e far sì che sia hibernate ad assegnarli automaticamente.

nucce
27-02-2008, 16:03
uso l'ultima versione...la 3.2
Come faccio ad automatizzare?
scusa la/le domanda/e sciocche ma sono alle primissime armi e non ho nessuno che mi spieghi!

dupa
27-02-2008, 17:39
uso l'ultima versione...la 3.2
Come faccio ad automatizzare?
scusa la/le domanda/e sciocche ma sono alle primissime armi e non ho nessuno che mi spieghi!

hai provato a non specificare il nome della column?
io uso hibernate annotations e con quelle è possibile, non so se con l'XML sia possibile non specificare il nome di colonna
ciao

yuki78
13-03-2008, 09:56
Ciao!!!
Scusate l'intromissione, ma sto provando ad integrare con Hibernate un progetto già esistente e che faceva uso delle servlet di java.

Il problema è che mi dà questo errore:

java.lang.NoClassDefFoundError: org/hibernate/Session

Ho visto che questo problema è dato dal fatto che non vengono importate le librerie...
Io ce le ho sia in una cartella lib che importati nel progetto (che è su eclipse)

Quale protrebbe essere il problema???

Grazie!!!


Ciao ciao:D

yuki78
13-03-2008, 10:15
Ho risolto da sola:D :D :D
Praticamente le librerie le importavo sul progetto ma non nel classpath di tomcat... che stordita!!!
Grazie a tutti!!!
Buona giornata:D :D :cool: