Strano errore con JPA (non-entity as target entity)

136 views
Skip to first unread message

Tiziano Lattisi

unread,
Jan 14, 2012, 10:56:12 AM1/14/12
to jug...@googlegroups.com
Ciao,

ho un errore che mi si presenta in esecuzione con cadenza
apparentemente casuale:

Exception [EclipseLink-30005] (Eclipse Persistence Services -
2.2.0.v20110202-r8913):
org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for
persistence archives with ClassLoader:
sun.misc.Launcher$AppClassLoader@63c78e57
Internal Exception: javax.persistence.PersistenceException: Exception
[EclipseLink-28018] (Eclipse Persistence Services -
2.2.0.v20110202-r8913):
org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [PyPaPiBasePU] failed.
Internal Exception: Exception [EclipseLink-7250] (Eclipse Persistence
Services - 2.2.0.v20110202-r8913):
org.eclipse.persistence.exceptions.ValidationException
Exception Description: [class org.pypapi.suite.base.entities.Utente]
uses a non-entity [class org.pypapi.suite.base.entities.Utenteufficio]
as target entity in the relationship attribute [field
utenteufficioCollection].
at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:105)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at org.pypapi.db.Database.open(Database.java:44)
at org.pypapi.suite.base.Start.main(Start.java:32)

Il messaggio è chiaro, ma non riesco a capire in quali circostanze
Utenteufficio risulta una non-entity.
Possibile che l'interprete associ alle classi i caratteri di
pesistenza jpa in ordine pseudo casuale, e che
quindi possa verificarsi la situazione in cui Utente è entità quando
Utenteufficio non ancora?

Sono fuori strada?

t.

Vítor Estêvão Silva Souza

unread,
Jan 15, 2012, 4:15:06 AM1/15/12
to jug...@googlegroups.com
On Sat, Jan 14, 2012 at 4:56 PM, Tiziano Lattisi <tiziano...@gmail.com> wrote:
Exception Description: [class org.pypapi.suite.base.entities.Utente]
uses a non-entity [class org.pypapi.suite.base.entities.Utenteufficio]
as target entity in the relationship attribute [field
utenteufficioCollection].


Di solito questa exception vuol dire che la classe Utente ha l'annotazione @Entity però Utenteufficio non ce l'ha. Oppure entrambi classi ce l'hanno, però una è stata registrata da EclipseLink come persistente mentre l'altra no (ad es., se nel persistence.xml hai specificato ogni classe persistente anziché un "path" dove il framework dovrebbe cercare tutte le classi con @Entity).

- Vítor Souza


Tiziano Lattisi

unread,
Jan 15, 2012, 10:19:30 AM1/15/12
to jug...@googlegroups.com
2012/1/15 Vítor Estêvão Silva Souza <vitor...@gmail.com>:

> Di solito questa exception vuol dire che la classe Utente ha l'annotazione
> @Entity però Utenteufficio non ce l'ha. Oppure entrambi classi ce l'hanno,
> però una è stata registrata da EclipseLink come persistente mentre l'altra
> no (ad es., se nel persistence.xml hai specificato ogni classe persistente
> anziché un "path" dove il framework dovrebbe cercare tutte le classi con
> @Entity).

Ok, ma il fatto che "a volte" dia errore mentre altre volte no, può
essere legato
al fatto che l'ordine in cui vengono registrate è pseudo casuale, e quindi può
capitare che prenda in considerazione Utente prima che sia registrato
Utenteufficio?

Questa, perlomeno, è l'unica spiegazione che mi riesce di darmi... ;-)

In persistence.xml ora sono specificate singolarmente.

Vítor Estêvão Silva Souza

unread,
Jan 15, 2012, 3:12:31 PM1/15/12
to jug...@googlegroups.com
2012/1/15 Tiziano Lattisi <tiziano...@gmail.com>

Ok, ma il fatto che "a volte" dia errore mentre altre volte no, può
essere legato
al fatto che l'ordine in cui vengono registrate è pseudo casuale, e quindi può
capitare che prenda in considerazione Utente prima che sia registrato
Utenteufficio?

Se l'errore succede soltanto a volte, mi sembra più un bug che altro. Io lo cercherei su Internet se qualcun altro ha avuto lo stesso problema. Poi se c'è un aggiornamento del application server potrebbe anche risolvere la questione.
 

In persistence.xml ora sono specificate singolarmente.

Hai provato tutte e due modi? Succede lo stesso?

- Vítor

 

Tiziano Lattisi

unread,
Jan 16, 2012, 4:26:53 AM1/16/12
to jug...@googlegroups.com
Ho fatto qualche test.

> Se l'errore succede soltanto a volte, mi sembra più un bug che altro. Io lo
> cercherei su Internet se qualcun altro ha avuto lo stesso problema. Poi se
> c'è un aggiornamento del application server potrebbe anche risolvere la
> questione.

L'errore si presenta eseguendo da netbeans la prima volta.
Appena l'applicazione parte, posso continuare a chiudere e rieseguire in rapida
sequenza senza riottenere mai l'errore.
Se però faccio un modifica ad un file, allora alla prima esecuzione mi
si ripresenta.
Veramente curioso come comportamento.
Sembrerebbe accadere ad ogni modifica, se non lascio scorrere un lasso di tempo
sufficiente prima di eseguire.
Forse a questo punto un baco di Netbeans ide.

Nessun application server, è un applicazione desktop.

>> In persistence.xml ora sono specificate singolarmente.
>
> Hai provato tutte e due modi? Succede lo stesso?

A dire il vero non sono ancora riuscito a scovare come si fa. Ho idea che sia
così semplice che la documentazione che ho trovato si limita a dire che si può
fare, senza specificare come. :-P

ciao
t.

Vítor Estêvão Silva Souza

unread,
Jan 16, 2012, 9:52:53 AM1/16/12
to jug...@googlegroups.com
2012/1/16 Tiziano Lattisi <tiziano...@gmail.com>

> Hai provato tutte e due modi? Succede lo stesso?
>> In persistence.xml ora sono specificate singolarmente.
A dire il vero non sono ancora riuscito a scovare come si fa. Ho idea che sia
così semplice che la documentazione che ho trovato si limita a dire che si può
fare, senza specificare come. :-P

Ho guardato le mie applicazioni Java EE full e Web Profile. In entrambi casi, il file persistence.xml non menziona nessuna classe persistente e allora l'application server cerca su tutte classi del modulo (nel caso di Java EE full, soltanto il modulo EJB, nel caso di Web Profile, c'è soltanto il modulo Web, quindi cerca tutte le classi), controllando quelle che hanno l'annotazione @Entity. Non so, però, come hai impostato JPA nella tua applicazione desktop, quindi non so se questo funzionerebbe...

- Vítor

Tiziano Lattisi

unread,
Jan 16, 2012, 10:18:49 AM1/16/12
to jug...@googlegroups.com
> Ho guardato le mie applicazioni Java EE full e Web Profile. In entrambi
> casi, il file persistence.xml non menziona nessuna classe persistente e
> allora l'application server cerca su tutte classi del modulo (nel caso di
> Java EE full, soltanto il modulo EJB, nel caso di Web Profile, c'è soltanto
> il modulo Web, quindi cerca tutte le classi), controllando quelle che hanno
> l'annotazione @Entity. Non so, però, come hai impostato JPA nella tua
> applicazione desktop, quindi non so se questo funzionerebbe...

Ho provato a non includere alcun tag <class>, ma sembra non funzionare.
Appena ho un attimo farò tutto il test su un'altra macchina (magari linux)
così vedo se cambia qualcosa.

Grazie mille delle dritte.
ciao!
t.

Tiziano Lattisi

unread,
Jan 31, 2012, 5:24:13 AM1/31/12
to jug...@googlegroups.com
> Ho provato a non includere alcun tag <class>, ma sembra non funzionare.

Per questo ho scoperto l'arcano. Non dichiarare <class> nel persistence.xml
funziona solo in Java EE, poiché viene fatta una scansione dei sorgenti per
individuare le classi @Entity. In Java SE non funziona. :-)

Reply all
Reply to author
Forward
0 new messages