EJB3 eclipseLink et JBOSS EAP6 avec POSTGRES insert non effectuée
Bonjour
J'ai récupéré un projet que je migre de MYSQL vers POSTGRES et sous JBOSS EAP6 6.4.22
Lorsque dans ma form je cherche à inserer un nouvel enregistrement
* je n'ai aucun message d'erreur
* et l'insert n'est pas effectué dans POSTGRES
* mais la sequence qui sert de clef primaire est bien incrementée !!
j'utilise org.eclipse.persistence.jpa.PersistenceProvider et POSTGRES12
Où est mon erreur ? Merci d'avance
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| private static final Log logger = LogFactory.getLog(AuthorService.class);
@PersistenceContext(unitName = "bookstorePersistenceUnit")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public AuthorService() {
super(Author.class);
}
@Override
public void create(Author author) {
Set<Book> authoredBooks = author.getAuthoredBooks();
if (authoredBooks != null && authoredBooks.size() > 0) {
for (Book book : authoredBooks) {
if (book.getAuthors() == null) {
book.setAuthors(new HashSet<Author>());
}
book.getAuthors().add(author);
em.merge(book);
}
}
em.persist(author);
logger.info("apres em.persist(author); persist de Author");
} |
standalone.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <subsystem xmlns="urn:jboss:domain:transactions:1.5">
<core-environment>
<process-id>
<uuid/>
</process-id>
</core-environment>
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
<coordinator-environment default-timeout="300"/>
</subsystem>
<datasource jta="true" jndi-name="java:jboss/datasources/book" pool-name="book" enabled="true" use-java-context="true" use-ccm="false">
<connection-url>jdbc:postgresql://localhost:5432/book</connection-url>
<driver>postgres</driver>
<security>
<user-name>postgres</user-name>
<password>admin</password>
</security>
</datasource> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| @Entity
@Table(name = "AUTHORS")
public class Author implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue( strategy = GenerationType.AUTO, generator = "authors_seq_gen3" )
@SequenceGenerator( name="authors_seq_gen3", sequenceName="AUTHORS_SEQ_GEN3", initialValue=5, allocationSize=1 ) //create sequence AUTHORS_SEQ_GEN3 START WITH 5 INCREMENT BY 1; //select currval('AUTHORS_SEQ_GEN3'); select nextval('AUTHORS_SEQ_GEN3');
@Column(name = "id")
private Long id;
@Size(min = 1, max = 50)
@NotNull
private String firstName;
@Size(min = 1, max = 50)
@NotNull
private String lastName;
@ManyToMany(mappedBy = "authors", fetch = FetchType.EAGER)
private Set<Book> authoredBooks;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Set<Book> getAuthoredBooks() {
return authoredBooks;
}
public void setAuthoredBooks(Set<Book> authoredBooks) {
this.authoredBooks = authoredBooks;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Author other = (Author) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
@Override
public String toString() {
return "Author{" + "firstName=" + firstName + ", lastName=" + lastName + '}';
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.jee.tutorial.bookstore.ejb;
import java.util.List;
import javax.persistence.EntityManager;
/**
*
* @author ikolev
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public abstract class JPAService<T> {
private Class<T> entityClass;
public JPAService(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(entity);
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
} |
persistence.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?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="bookstorePersistenceUnit" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:jboss/datasources/book</jta-data-source>
<class>com.jee.tutorial.bookstore.jpa.Author</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level.sql" value="FINE" />
<property name="eclipselink.logging.parameters" value="true" />
</properties>
</persistence-unit>
</persistence> |
Dans les modules de JBOSS
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <module xmlns="urn:jboss:module:1.1" name="org.eclipse.persistence">
<resources>
<resource-root path="eclipselink-2.7.7.jar">
<resource-root path="javax.persistence-api-2.2.jar">
<filter>
<exclude path="javax/**" />
</filter>
</resource-root>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="javax.validation.api"/>
<module name="javax.xml.bind.api"/>
<module name="org.antlr"/>
<module name="org.apache.commons.collections"/>
<module name="org.dom4j"/>
<module name="org.javassist"/>
<module name="org.jboss.logging"/>
<module name="org.postgresql"/>
</dependencies>
</module> |
Je pense que mon soucis provient de la gestion ou non gestion des transactions par mon JBOSS EAP6