JodaTime + VRaptor + JPA

11 respostas
sowat

Boa tarde pessoal,

Tenho tentado configurar o JodaTime em um projeto VRaptor3. Não estou usando as anotações do Hibernate, optei por usar apenas JPA. Estou obtendo o seguinte erro:

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.ejb.Ejb3Configuration
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)

Esse erro aparece apenas por colocar a seguinte dependência:

joda-time
joda-time-hibernate
1.2

As minhas dependências do Hibernate são:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${org.hibernate.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>${org.hibernate.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.1.0.Beta1</version>
    </dependency>

<org.hibernate.version>3.5.0-Final</org.hibernate.version>

Estou achando que para conseguir usar JodaTime na persistência, só retirano JPA, e usando a API do Hibernate, o que eu não gostaria de fazer.

Alguém já passou por esse problema? Poderiam me ajudar?

11 Respostas

G

A partir da versão 3.5, o hibernate é distribuído all-in-one, ou seja, você tem apenas um jar para tudo (jpa-provider + annotations + envers).

Lucas_Cavalcanti

vc está usando o jodatime como campos das entidades também? por isso vc colocou o jodatime-hibernate?

G

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.ejb.Ejb3Configuration at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)

Para mim você está com o jar do JPA1 ao invés do JPA2. O Hibernate 3.5 só funciona com JPA2.

sowat

Exato, tentei colocar o tipo DateTime como atributo da minha entidade.

sowat

garcia-jj:
java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.ejb.Ejb3Configuration at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)

Para mim você está com o jar do JPA1 ao invés do JPA2. O Hibernate 3.5 só funciona com JPA2.

Tudo ocorre bem se eu usar o tipo Date do Java nas classes de entidades. O Erro so aparece quando coloco a dependência do JodaTime.

Imagino que o Joda time dependa da versão antiga do Hibernate, por isso está dando “NoClassDefFoundError”.

Lucas_Cavalcanti

talvez seja isso sim… o último release do jodatime-hibernate foi em 2009…

http://joda-time.sourceforge.net/contrib/hibernate/index.html

de qqer forma, vc só precisa criar um TypeAdapter…

tenta tirar o jodatime-hibernate,

criar uma classe parecida (ou igual) a essa:
http://joda-time.svn.sourceforge.net/viewvc/joda-time/trunk/JodaTimeContrib/hibernate/src/main/java/org/joda/time/contrib/hibernate/PersistentDateTime.java?revision=1591&view=markup

e anote o campo que é DateTime com @Type:

@Type("br.com.caminho.pra.sua.PersistentDateTime")
private DateTime seucampo;
sowat

Lucas Cavalcanti:
talvez seja isso sim… o último release do jodatime-hibernate foi em 2009…

http://joda-time.sourceforge.net/contrib/hibernate/index.html

de qqer forma, vc só precisa criar um TypeAdapter…

tenta tirar o jodatime-hibernate,

criar uma classe parecida (ou igual) a essa:
http://joda-time.svn.sourceforge.net/viewvc/joda-time/trunk/JodaTimeContrib/hibernate/src/main/java/org/joda/time/contrib/hibernate/PersistentDateTime.java?revision=1591&view=markup

e anote o campo que é DateTime com @Type:

@Type("br.com.caminho.pra.sua.PersistentDateTime") private DateTime seucampo;

hummm! verdade,

vou tentar aqui… posto e posto o feedback.

Se não der certo, pensei em usar Date do java mesmo nas entidades e o Joda para a interface.

sowat

Lucas Cavalcanti:
talvez seja isso sim… o último release do jodatime-hibernate foi em 2009…

http://joda-time.sourceforge.net/contrib/hibernate/index.html

de qqer forma, vc só precisa criar um TypeAdapter…

tenta tirar o jodatime-hibernate,

criar uma classe parecida (ou igual) a essa:
http://joda-time.svn.sourceforge.net/viewvc/joda-time/trunk/JodaTimeContrib/hibernate/src/main/java/org/joda/time/contrib/hibernate/PersistentDateTime.java?revision=1591&view=markup

e anote o campo que é DateTime com @Type:

@Type("br.com.caminho.pra.sua.PersistentDateTime") private DateTime seucampo;

Valeu Lucas :slight_smile: Funcionou perfeitamente. Simplismente criei o TypeAdapter a partir do próprio Codigo do JodaTime :slight_smile:

G

Engraçado que eu tenho um projeto e uso o jodatime + jodatime-hibernate com JPA2 sem problemas. Porém eu não uso o Maven, talvez seja por isso.

Lucas_Cavalcanti

o problema é que o maven deve estar fazendo um classpath hell…

sowat, tenta fazer o seguinte

coloque de novo a dependência do jodatime-hibernate, só que agora excluindo o hibernate:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time-hibernate</artifactId>
    <version>1.2</version>
    <exclusions>
         <exclusion>
               <groupId>org.hibernate</groupId>
               <artifactId>hibernate</artifactId>
         </exclusion>
    </exclusions>
</dependency>

e troque o @Type para:

@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")

acho que assim deve funcionar…
vc pode até apagar sua cópia do PersistentDateTime =)

sowat

Lucas,

Realmente era tratava-se de um “classpath Hell”. Foi só pedir ao maven que excluisse as dependências que o JodaTime possuia que funcionou uma beleza.

Obrigado pela ajuda. :smiley:

Criado 21 de novembro de 2010
Ultima resposta 23 de nov. de 2010
Respostas 11
Participantes 3