0

I created a dynamic web project with Eclipse Luna and Tomcat using Spring + JPA + Hibernate .. I've added javax.persistence jar but I always get this error. Where am I doing wrong? This project will save a user in the user table in the database .. The form data is persisted.. This is the code of my application

error code

Avvertenza: Exception encountered during context initialization - cancelling refresh  attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in ServletContext resource [/WEB-INF/context-servlet.xml]: Invocation of  init method failed; nested exception is java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery
at org.hibernate.cfg.AnnotationBinder.bindDefaults(AnnotationBinder.java:276)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1402)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at  org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:341)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
... 21 more

bean/Utente.java

 package bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Utente {

@Id
@GeneratedValue
@Column(name="id")
private Integer id;

@Column(name="cognome")
private String cognome;


@Column(name="nome")
private String nome;


@Column(name="eta")
private Integer eta;

public Integer getId(){return id;}

public void setId(Integer id){this.id=id;}

public String getCognome(){return cognome;}

public void setCognome(String cognome){this.cognome=cognome;}

public String getNome(){return nome;}

public void setNome(String nome){this.nome=nome;}

public Integer getEta(){return eta;}

public void setEta(Integer eta){this.eta=eta;}

@Override
public String toString(){
    return "id: "+id+" cognome:"+cognome+" nome"+nome;
}//toString

}//Utente

controller/HomeController.java

package controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import persistence.UtenteDAOImpl;
import bean.Utente;

@Controller
public class HomeController {

@Autowired
UtenteDAOImpl utenteDAO;

@RequestMapping(value="/",method=RequestMethod.GET)
public ModelAndView welcome(){      
    return new ModelAndView("index", "command", new Utente());
}//welcome

@RequestMapping(value="/registra",method=RequestMethod.POST)
public void saveUtente(@ModelAttribute Utente utente){
    utenteDAO.aggiungiUtente(utente);
}



}//HomeController

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<h2>Dati utente</h2>

<form action="/SpringMVCFormHibernate/registra">
    <p>
        <label>Cognome</label><br/>
        <input type="text" id="cognome"/>
    </p>
    <p>
        <label>Nome</label><br/>
        <input type="text" id="nome"/>
    </p>
    <p>
        <label>Eta</label><br/>
        <input type="text" id="eta"/>
    </p>

    <input type="submit" id="submit" value="registra">  
</form>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" id="WebApp_ID" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<display-name>Spring MVC Form</display-name>


<servlet>
    <servlet-name>context</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>context</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>


<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/context-servlet.xml</param-value>
</context-param>

</web-app>

context-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">

<context:component-scan base-package="controller"/>

<tx:annotation-driven/>

<mvc:annotation-driven/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property value="/WEB-INF/jsp/" name="prefix"/>
    <property value=".jsp" name="suffix"/>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/spring_hibernate"/>
  <property name="username" value="root"/>
  <property name="password" value="password"/>
  <property name="initialSize" value="5"/>
  <property name="maxTotal" value="10"/>
  </bean>

<bean id="emf"  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource"/>
   <property name="packagesToScan" value="persistence"/>
   <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
</bean>

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
     <property name="database" value="MYSQL"/>
     <property name="showSql" value="true"/>
     <property name="generateDdl" value="false"/>
     <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
</bean>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="emf" />
</bean>


<bean id="utente" class="bean.Utente"/>

</beans>
0

1 Answer 1

1
NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery

is quite clear. You have a JPA 2.0 API jar in the CLASSPATH but it is expecting JPA 2.1 API jar? And while checking that you check what version of your JPA implementation you have there, and which version of JPA it requires

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

7 Comments

In lib folder there is hibernate-jpa-2.1-api-1.0.0.Final.jar
The CLASSPATH is the only place Java cares about, so either the JPA API jar is incorrect/invalid or a dependency of that jar is not present.
Can you explain it better?
what is in the CLASSPATH? lib is just a place in the filesystem. NoClassDefFoundError is thrown when something is not present in the CLASSPATH ... so either that class, or one it needs to load that class. I've no idea what dependencies Hibernate-jpa-2.1-api requires ... one of the problems of taking a supposedly 'standard' jar from a vendor.
In this link click to open there is the contents of the lib folder Where am I doing wrong?
|

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.