J'utilise Spring 3.1 et Eclipselink 2 avec Tomcat, mais pour une raison quelconque, les données ne sont pas persistantes. La table est en cours de génération.Problème de persistance Spring Eclipselink (aucune insertion)
dispatcher-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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.myapp.user.controllers" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
</beans>
applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<aop:aspectj-autoproxy />
<context:load-time-weaver aspectj-weaving="on"/>
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<bean id="loadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="database" value="MYSQL"/>
<property name="showSql" value="true"/>
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:persistenceUnitName="myAppPU"
p:persistenceXmlLocation="classpath*:META-INF/persistence.xml"
p:jpaVendorAdapter-ref="jpaVendorAdapter"
p:loadTimeWeaver-ref="loadTimeWeaver"
p:dataSource-ref="dataSource"
/>
<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"
p:dataSource-ref="dataSource"
/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/qpdb?zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="myAppPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.myapp.entities.GenericUser</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/qpdb?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<!--<property name="eclipselink.weaving" value="static"/>-->
</properties>
</persistence-unit>
</persistence>
WelcomeController.java
package com.myapp.user.controllers;
import com.myapp.entities.GenericUser;
import java.math.BigInteger;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
@Transactional(propagation=Propagation.SUPPORTS)
@Controller
public class WelcomeController {
@PersistenceContext
private EntityManager entityManager;
public WelcomeController() {
}
@RequestMapping({"/"})
public String showPublicPage(Map<String, Object> model) {
GenericUser gu = new GenericUser();
addUser(gu);
return "welcome";
}
@Transactional(propagation= Propagation.REQUIRED,readOnly=false)
public void addUser(GenericUser gu) {
gu.setUserID(BigInteger.ONE);
gu.setEmail("asdfadf");
entityManager.persist(gu);
}
}
GenericUser.java
package com.myapp.entities;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
@Entity
@Table(name="generic_user")
public class GenericUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private BigInteger userID;
@Column(name = "USERNAME")
private String username;
@Column(name = "EMAIL")
private String email;
@Column(name = "PASSWORD")
private String password;
public BigInteger getUserID() {
return userID;
}
public void setUserID(BigInteger id) {
this.userID = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public int hashCode() {
int hash = 0;
hash += (userID != null ? userID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof GenericUser)) {
return false;
}
GenericUser other = (GenericUser) object;
if ((this.userID == null && other.userID != null) || (this.userID != null && !this.userID.equals(other.userID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.myapp.entities.GenericUser[ id=" + userID + " ]";
}
}
Je commence avec tomcat -javaagent: chemin/vers/printemps-agent 2.5.6.SEC03.jar
Tomcat Log
11 juillet 2013 21:30:36 org.apache.catalina.core.ApplicationContext log
INFO: Détruire 'dispatcher' Spring FrameworkServlet
11 juillet 2013 21:30:36 org.apache.catalina.core.ApplicationContext log
INFO: Fermeture de la racine de printemps WebApplicationContext
11 juillet 2013 21:33:13 org.apache. catalina.core.ApplicationContext log
INFO: Pas de printemps types WebApplicationInitializer détectés sur classpath
11 juillet 2013 21:33:13 org.apache.catalina.core.ApplicationContext log
IN FO: Initialiser racine printemps WebApplicationContext
11 juillet 2013 21:33:13 org.apache.catalina.core.StandardContext listenerStart
GRAVES: Exception envoi événement initialisé contexte à l'auditeur instance de org.springframework de classe. web.context.ContextLoaderListener
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: La ligne 52 du document XML de la ressource ServletContext [/WEB-INF/applicationContext.xml] n'est pas valide; l'exception imbriquée est org.xml.sax.SAXParseException; lineNumber: 52; columnNumber: 6; La cible de l'instruction de traitement correspondant "[xX] [mM] [lL]" n'est pas autorisée.
à org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions (XmlBeanDefinitionReader.java:396)
à org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions (XmlBeanDefinitionReader.java:334)
à org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions (XmlBeanDefinitionReader.java: 302)
à org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions (AbstractBeanDefinitionReader.java:174)
à org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions (AbstractBeanDefinitionReader. java: 209)
à org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions (AbstractBeanDefinitionReader.java:180)
à org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions (XmlWebApplicati onContext.java:125)
à org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions (XmlWebApplicationContext.java:94)
à org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory (AbstractRefreshableApplicationContext. java: 131)
à org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory (AbstractApplicationContext.java:522)
à org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext .java: 436)
à org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:385)
à org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:284)
à org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:111)
à org.apache.catalina.core.StandardContext.listenerStart (StandardContext.java:4779)
à org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5273)
à org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:150)
à org. apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:895)
à org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:871)
à org.apache.catalina. core.StandardHost.addChild (StandardHost.java:615)
à org.apache.catalina.startup.HostConfig.deployDescriptor (HostConfig.java:649)
à org.apache.catalina.startup.HostConfig $ DeployDescriptor.run (HostConfig.java:1585)
à java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:471)
à java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:334)
à java.util. concurrent.FutureTask.run (FutureTask.java: 166)
à java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110)
à java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603)
at java.lang.Thread.run (Thread.java:722)
Causée par: org.xml.sax.SAXParseException; lineNumber: 52; columnNumber: 6; La cible de l'instruction de traitement correspondant "[xX] [mM] [lL]" n'est pas autorisée.
à com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException (ErrorHandlerWrapper.java:198)
à com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper. FatalError (ErrorHandlerWrapper.java:177)
à com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.java:441)
à com.sun.org.apache. xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.java:368)
à com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError (XMLScanner.java:1388)
à com.sun.org.apache.xerces.internal.impl.XMLScanner.scanPIData (XMLScanner.java:675)
à com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanPIData (XMLDocumentFragmentScannerImpl.java:980)
à com.sun.org.apache.xerces. internal.impl.XMLScanner.scanPI (XMLScanner.java:643)
à l'adresse com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ PrologDriver.next (XMLDocumentS cannerImpl.java:913)
à com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:607)
à com.sun.org.apache.xerces. internal.impl.XMLNSDocumentScannerImpl.next (XMLNSDocumentScannerImpl.java:116)
à com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:489)
à com. sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:835)
à com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:764)
à com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:123)
à com.sun.org.apache.xerces.internal.parsers.DOMParser.parse (DOMParser.java:237)
à com.sun.org.apache.xerces .internal.jaxp.DocumentBuilderImpl.parse (DocumentBuilderImpl.java:300)
à org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument (De faultDocumentLoader.java: 75)
à org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions (XmlBeanDefinitionReader.java:388)
... 27 plus
11 juillet 2013 09:33: 13 h org.apache.catalina.core.ApplicationContext log
INFO: Fermeture de la racine printemps WebApplicationContext
11 juillet 2013 21:33:13 org.apache.catalina.core.StandardContext listenerStop
GRAVES: événement détruit Exception contexte envoyer à l'auditeur instance de la classe org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: BeanFactory non initialisé ou déjà fermé - appeler « rafraîchir » avant d'accéder à des haricots via ApplicationContext
à org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory (AbstractRefreshableApplicationContext.java:172)
à org.springframework.context.support.AbstractApplicationContext.destroyBeans (AbstractApplicationContext.java:1066)
à org.springframework.context.support.AbstractApplicationContext.doClose (AbstractApplicationContext.java:1040)
à org.springframework.context.support.AbstractApplicationContext.close (AbstractApplicationContext.java:988)
à org.springframework.web.context.ContextLoader.closeWebApplicationContext (ContextLoader.java:556)
à org.springframework.web.context.ContextLoaderListener.contextDestroyed (ContextLoaderListener.java:142)
à org.apache.catalina.core.StandardContext.listenerStop (StandardContext.java:4819)
à org.apache.catalina.core.StandardContext.stopInternal (StandardContext.java:5466)
à org. apache.catalina.util.LifecycleBase.stop (LifecycleBase.java:232)
à org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:160)
à org.apache.catalina. core.ContainerBase.addChildInternal (ContainerBase.java:895)
à org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:871)
à org.apache.catalina.core.StandardHost.addChild (StandardHost.java:615)
à org. apache.catalina.startup.HostConfig.deployDescriptor (HostConfig.java:649)
à org.apache.catalina.startup.HostConfig $ DeployDescriptor.run (HostConfig.java:1585)
à java.util. concurrent.Executors $ RunnableAdapter.call (Executors.java: 471)
à java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:334)
à java.util.concurrent.FutureTask.run (FutureTask.java:166)
à java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110)
à java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603)
à java.lang .Thread.run (Thread.java:722)
11 juillet 2013 21:33:15 org.apache.catalina.core.ApplicationContext log
INFO: Pas de printemps types WebApplicationInitializer détectés sur classpath
11 juil 2013 21:33:15 org.apache.catalina.core.ApplicationContext log
INFO: racine Initialiser printemps WebApplicationContext
11 juillet 2013 21:33:18 org.apache.catalina.core.ApplicationContext log
INFO: 'dispatcher' Spring FrameworkServlet Initializing
11 juillet 2013 21:34:32 org.apache.catalina.core.ApplicationContext log
INFO: Spring FrameworkServlet Destruction 'dispatcher'
11 juillet 2013 21:34:32 org.apache.catalina.core.ApplicationContext log
INFO: Fermeture de la racine de printemps WebApplicationContext
11 juillet 2013 21:34:34 org.apache.catalina. core.Application Contexte journal
INFO: Pas de printemps types WebApplicationInitializer détectés sur classpath
11 juillet 2013 21:34:34 org.apache.catalina.core.ApplicationContext log
INFO: Initialiser racine printemps WebApplicationContext
11 juillet 2013 21:34:37 org.apache.catalina.core.ApplicationContext log
INFO: 'dispatcher' Spring FrameworkServlet Initializing
L'application fonctionne avec succès et ouvre la vue 'welcome', mais les données (GenericUser gu) ne persiste pas ...
Vos applicationContext.xml ont un problema en ligne 52. Probablement la ligne: ' 'Vous devez résoudre ce problème en premier ... –
renanlf
corrigé .. Mais maintenant, aucune unité de persistance avec le nom myAppPU ne peut être trouvée ... persistence.xml va dans build/web/WEB-INF/classes/META-INF/after build .. et j'ai spécifié persistenceXmlLocation dans applicationContext.xml ... Des idées? – PrawDG