JPA with pure hibernate

"Jochimsen, Janko" <[email protected]>
Newsgroups gmane.comp.java.tapestry.user
Message-ID <BAF1D8ED0A2C3B4AB4BD9094DA9995C702634B2147@EX10MBOX1F.hosting.inetserver.de>
Hi,

I am trying to switch my application from a standard tapestry-hibernate version to a tapestry-jpa version. I would like to have a pure hibernate solution and skip any eclipselink dependency.

After spending some time with
                http://tapestry.apache.org/integrating-with-jpa.html
I am more or less lost as the documentation is not working and the comments and remarks from basileChandesris are not really clear.

After I discovered that it seems to be necessary to provide this line:
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
my persistence.xml itself looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
   <persistence-unit name="DemoUnit" transaction-type="RESOURCE_LOCAL">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <properties>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/xxx-test</property>
        <property name="hibernate.connection.username">XX</property>
        <property name="hibernate.connection.password">XXX</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      </properties>
   </persistence-unit>
</persistence>

As it is not stated in the guide I do not provide a hibernate.cfg.xml file.


The relevant part of the POM file reads:
                               <dependency>
                                               <groupId>org.apache.tapestry</groupId>
                                               <artifactId>tapestry-jpa</artifactId>
                                               <version>${tapestry-release-version}</version>
                               </dependency>

                               <dependency>
                                               <groupId>org.hibernate</groupId>
                                               <artifactId>hibernate-entitymanager</artifactId>
                                               <version>${hibernate-version}</version>
                                               <exclusions>
                                                               <exclusion>
                                                                               <!-- omit Geronimo JPA spec to avoid conflict with Hibernate JPA spec -->
                                                                               <groupId>org.apache.geronimo.specs</groupId>
                                                                               <artifactId>geronimo-jpa_2.0_spec</artifactId>
                                                               </exclusion>
                                               </exclusions>
                               </dependency>


With
                <properties>
                               <tapestry-release-version>5.4.1</tapestry-release-version>
                               <hibernate-version>4.2.6.Final</hibernate-version>
                ....

                </properties>

I use 4.2.6.Finale of hibernate as 4.3.1.Final (what is stated as the correct version for Tapestry 5.4. in
                http://tapestry.apache.org/release-notes-54.html
gives me an error.


AppModule.java  contains:

       @Match("*Dao")
          public static void adviseTransactionally(
                JpaTransactionAdvisor advisor,
                MethodAdviceReceiver receiver) {

             advisor.addTransactionCommitAdvice(receiver);
          }


Although it is not mentioned in

                http://tapestry.apache.org/integrating-with-jpa.html

I also added the following statement in the AppModule.java :

                @Contribute(EntityManagerSource.class)
                   public static void configurePersistenceUnitInfos(MappedConfiguration<String,PersistenceUnitConfigurer> cfg) {

                      PersistenceUnitConfigurer configurer = new PersistenceUnitConfigurer() {
                         public void configure(TapestryPersistenceUnitInfo unitInfo) {
                                unitInfo.addManagedClass(User.class);
                         }
                     };
                     cfg.add("DemoUnit", configurer);
                   }

This crashes the App on start up  with the following Error Massage:
org.apache.tapestry5.ioc.internal.OperationException: javax.persistence.PersistenceException: [PersistenceUnit: DemoUnit] Unable to build EntityManagerFactory

Deep down in the Exception Stack there
Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

This is all not really helpful at least to me.


If I omit the statement  configurePersistenceUnitInfos ...

The App starts. But as soon as it calls the entityManager in the following class via add(User user);
public class UserDAOImpl implements UserDAO
{
                @PersistenceContext(unitName = "DemoUnit")
     private EntityManager entityManager;

    @Override
    @PersistenceContext(unitName = "DemoUnit")
    public void add(final User user)
    {
        entityManager.persist(user);
    }

    @Override
    @SuppressWarnings(
    { "unchecked" })
    public List<User> findAll()
    {
        return entityManager.createQuery("select u from User u order by u.id desc").getResultList();
    }

    @Override
    public void delete(final User... users)
    {
        for (final User user : users)
            entityManager.remove(user);
    }

    @Override
    public void deleteAll()
    {
        for (final User u : findAll())
        {
            entityManager.remove(u);
        }
    }
}

I get the error message:

Unable to locate a single EntityManager. You must provide ...


From the comments and other posts it is clear that the documentation is outdated and not really working. But there seems to be no really helpful alternative. I would be very grateful if someone could give me a hint where to look or explain to me what is going on here.


Cheers

Janko
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.