2014-07-07 4 views
5

Sto costruendo una nuova applicazione utilizzando EclipseLink per la prima volta.EclipseLink aggiungendo un convertitore causa ValidationException a intermittenza

Tutto andava bene fino a quando non ho aggiunto un'entità che utilizza JSR310 Instant per una colonna timestamp.

Così ho creato una classe convertitore e mappato al campo associato in questo modo:

@Convert(converter = JSR310InstantTypeConverter.class) 
private Instant pwdChangeCodeExpiresOn = null; 

Tuttavia, poiché ho aggiunto che convertitore l'applicazione ha iniziato a gettare la seguente eccezione:

SEVERE: Servlet.service() for servlet [APIJerseyServlet] in context with path [/Sclera] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.ExceptionInInitializerError] with root cause 
Local Exception Stack: 
Exception [EclipseLink-7351] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: The converter class [com.sclera.utils.JSR310InstantTypeConverter] specified on the mapping attribute [pwdChangeCodeExpiresOn] from the class [com.sclera.entity.Admin] was not found. Please ensure the converter class name is correct and exists with the persistence unit definition. 
    at org.eclipse.persistence.exceptions.ValidationException.converterClassNotFound(ValidationException.java:2317) 
    at org.eclipse.persistence.internal.jpa.metadata.converters.ConvertMetadata.process(ConvertMetadata.java:248) 

Questo inizierà dopo un cambio di codice (quando Eclipse riavvia il server). Devo fermarmi e avviare (e/o riavviare) il server manualmente alcune volte fino a quando finalmente ricomincerà a funzionare. Quindi funzionerà fino a quando un codice cambia o due più tardi quando inizierà a generare nuovamente l'eccezione.

Questo è un dolore enorme. Qualcuno conosce la causa e come risolverlo?

risposta

8

Soluzione corretta trovata. L'aggiunta della classe del convertitore al file persistence.xml, come suggerito dal messaggio di errore, sembra aver risolto il problema.

<persistence-unit name="example" transaction-type="RESOURCE_LOCAL"> 
    .... 
    <class>com.example.utils.JSR310InstantTypeConverter</class> 
    ... 
</persistence-unit> 

Avrei dovuto provarlo prima. Il fatto che funzioni un po 'di tempo senza questo mi ha fatto pensare che non avrebbe fatto la differenza.

+1

Sembra che andiamo a Google prima di leggere i messaggi di errore ... Ho fatto lo stesso. A nostra difesa, il vomito eccezionale è molto lungo. – Fuhrmanator