0

I want to use Spring 3.2.8 + JPA/Hibernate on Oracle DB (first time for me).

I think I can not configure correctly something (persistence unit, spring config files) so i have always an error when deploying in Tomcat.

   Caused by: java.lang.ClassNotFoundException: org.Hibernate.ejb.HibernatePersistence
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:255)
    at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:288)
    ... 38 more

Aug 08, 2014 1:37:16 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Aug 08, 2014 1:37:16 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ftc-wo-webapp] startup failed due to previous errors
Aug 08, 2014 1:37:16 AM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Aug 08, 2014 1:37:16 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]

The hibernate jars (including entity manager jar) are contained in the final war (under WEB-INF/lib) So I don't understand why still the class is not founded. The following configuration is present:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
      xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
      http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="woBPFlowInfo">
    <provider>org.Hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.hbm2ddl.auto" value="update" />
      <property name="hibernate.show_sql" value="true" />
    </properties>
  </persistence-unit>
</persistence>

main spring config file: app_config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
      ...    
    <context:component-scan base-package="com.ftc.webapp" />

    <mvc:annotation-driven/>

<!-- Database added -->

    <!-- Loads BPFlowInfo from the JPA system -->
    <bean id="woBPFlowRepository" class="com.ftc.webapp.data.JpaWoBPFlowRepository"/>

    <!-- Instructs the container to look for beans with @Transactional and decorate them -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- Enables annotation-config, needed for @PersistenceContext annotations -->
    <context:annotation-config />

     <import resource="db_config.xml"/>
</beans>

db_config.xml file

<?xml version="1.0" encoding="UTF-8"?>
<!-- // NAME: rewards-db-config.xml // // MODULE: rewardsdb // // PURPOSE: 
    Database and transaction configuration for testing the rewards // application. -->
<beans xmlns="...">

    <context:annotation-config />


    <context:property-placeholder location="classpath:jdbc.properties"/>

    <bean id="dataSource"
          class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="testOnBorrow" value="true" />
        <property name="initialSize" value="2" />
        <property name="maxActive" value="50" />
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="300"/>
        <property name="validationQuery" value="select 1 from dual" />
    </bean>

    <!-- Translates ORM exceptions to Spring Data Access Exceptions -->
    <bean
        class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <!-- Data access using 100% JPA -->
        <!-- A transaction manager for working with JPA Entity Managers -->
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>

        <!-- FactoryBean that creates the EntityManagerFactory -->
        <bean id="entityManagerFactory"  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="persistenceUnitName" value="woBPFlowInfo" />
        </bean>
</beans>

and pom.xml contains following dependencies:

pom.xml

  <properties>
      <smp.version>5.2.2.6</smp.version>
      <spring.version>3.2.8.RELEASE</spring.version>
      <hibernate.version>3.4.0.GA</hibernate.version>
      <javaxServlet.version>2.5</javaxServlet.version>
      <jackson.version>1.9.5</jackson.version>      
  </properties>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>jsr250-api</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>${javaxServlet.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>



    <!-- Persistency & Object Relational mapping -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.5.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
    </dependency>

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

    <dependency>
        <groupId>ojdbc</groupId>
        <artifactId>ojdbc</artifactId>
        <version>14</version>
    </dependency>

   <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
  </dependencies>
2
  • 1
    duplicate stackoverflow.com/questions/8734962/… ? Commented Aug 8, 2014 at 0:48
  • well this doesn't help. As mentioned there I need only hibernate-entitymanager as dependency (from hibernate) I changed the version to 4.2.8.Final from 3.4.0.GA so that hibernate-core has the same version as hibernate=entitymanager, I removed dependency to spring-data-jpa and introduced dep. to spring-tx & spring-orm as in other examples I have. Still doesn't help. If i have the hibernate-enititymanager jar in the /WEB-INF/lib dir, why the class is not founded ? Commented Aug 9, 2014 at 23:02

2 Answers 2

2

as I suspected - bad configuration, in fact bad spelling. replace

<provider>org.Hibernate.ejb.HibernatePersistence</provider>

with

<provider>org.hibernate.ejb.HibernatePersistence</provider>

and ClassNotFoundException: org.Hibernate.ejb.HibernatePersistence disappear

Stupid enough. I spent lot's of hours for this stupid issue. Sorry.

Sign up to request clarification or add additional context in comments.

Comments

0

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> is the right persistence provider as per JPA standards.

<provider>org.hibernate.ejb.HibernatePersistence</provider> is deprecated.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.