IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Java EE 6 exception persistance


Sujet :

JPA Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut Java EE 6 exception persistance
    Bonjour, je m'essaye à Java EE 6 et j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    exception
     
    javax.servlet.ServletException: javax.persistence.TransactionRequiredException: Transaction is required to perform this operation (either use a transaction or extended persistence context)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)
    cause mère
     
    javax.faces.el.EvaluationException: javax.persistence.TransactionRequiredException: Transaction is required to perform this operation (either use a transaction or extended persistence context)
    	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	javax.faces.component.UICommand.broadcast(UICommand.java:315)
    	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    	org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67)

    j'ai cette erreur lorsque j'essaye d'enregistrer en base un widget créer, voici mon code:


    Widget.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package knowledge.tuto1;
     
    import java.io.Serializable;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
     
    @Entity
    public class Widget implements Serializable
    {
       private Long id;
       private String partNumber;
       private String name;
       private String description;
     
       @Id
       @GeneratedValue
       public Long getId()
       {
          return id;
       }
     
       public void setId(Long id)
       {
          this.id = id;
       }
     
       // demonstrates a column name override
       @Column(name = "partno")
       public String getPartNumber()
       {
          return partNumber;
       }
     
       public void setPartNumber(String partNumber)
       {
          this.partNumber = partNumber;
       }
     
       public String getName()
       {
          return name;
       }
     
       public void setName(String name)
       {
          this.name = name;
       }
     
       public String getDescription()
       {
          return description;
       }
     
       public void setDescription(String description)
       {
          this.description = description;
       }
     
       /** Default value included to remove warning.  Remove or modify at will.  */  
       private static final long serialVersionUID = 1L;
    }
    Mon controleur.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    package knowledge.tuto1;
     
    import javax.annotation.PostConstruct;
    import javax.ejb.TransactionManagement;
    import javax.enterprise.inject.Model;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.validation.constraints.Digits;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Pattern;
     
    import org.hibernate.validator.constraints.Email;
    import org.hibernate.validator.constraints.NotEmpty;
     
    public @Model class Controleur {
    	private Widget widget;
    	private final String text = "";
     
    	private String letters;
     
    	private String numbers;
     
    	private String email;
     
    	@Inject
    	@WidgetRepository
    	EntityManager widgetRepository;
     
    	public Controleur() {
    	}
     
    	@PostConstruct
    	public void initialize() {
    		widget = new Widget();
    		System.out
    				.println(this.getClass().getSimpleName() + " was constructed");
    	}
     
    	public String getText() {
    		return text;
    	}
     
    	public Widget getWidget() {
    		return widget;
    	}
     
    	public void setWidget() {
    		widgetRepository.persist(widget);
    	}
     
    }


    et mon fichier xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       template="/WEB-INF/templates/default.xhtml">
       <ui:define name="content">
          <h1>Hello World!</h1>
          <p>Your CDI bean <code>HelloWorld</code> says <span style="color: blue;">#{controleur.text}</span> using the Unified EL.</p>
     
          <h:form id="bv">
             <h2>Bean Validation examples</h2>
             <p>Enforces annotation-based constraints defined on the model class.</p>
             <table>
                <tr>
                   <th style="text-align: right;">
                      <h:outputLabel for="part" value="Partner:"/>
                   </th>
                   <td>
                      <h:inputText id="part" value="#{controleur.widget.partNumber}"/>
                      <h:message for="part" errorClass="invalid"/>
                   </td>
                </tr>
                <tr>
                   <th style="text-align: right;">
                      <h:outputLabel for="name" value="Name:"/>
                   </th>
                   <td>
                      <h:inputText id="name" value="#{controleur.widget.name}"/>
                      <h:message for="name" errorClass="invalid"/>
                   </td>
                </tr>
                <tr>
                   <th style="text-align: right;">
                      <h:outputLabel for="desc" value="Description:"/>
                   </th>
                   <td>
                      <h:inputText id="desc" value="#{controleur.widget.description}"/>
                      <h:message for="desc" errorClass="invalid"/>
                   </td>
                </tr>
             </table>
             <p>
                <h:commandButton id="check" action="#{controleur.setWidget()}" value="Check values"/>
                <h:outputText value=" All clear!" rendered="#{facesContext.postback and empty facesContext.messageList}" style="color: green;"/>
             </p>
          </h:form>
          <h2>Widgets</h2>
          <h:dataTable var="_widget" value="#{widgets}">
             <h:column>
             <f:facet name="header">Id</f:facet>
                #{_widget.id}
             </h:column>
             <h:column>
                <f:facet name="header">Part Number</f:facet>
                #{_widget.partNumber}
             </h:column>
             <h:column>
                <f:facet name="header">Name</f:facet>
                #{_widget.name}
             </h:column>
             <h:column>
                <f:facet name="header">Description</f:facet>
                #{_widget.description}
             </h:column>
          </h:dataTable>
       </ui:define>
    </ui:composition>

    erreur lors de l'appel à la methode setWidget()

    merci beaucoup.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le persistence.xml ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    voila:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?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="widgets">
          <!-- You can force a non-default JPA provider using one of these declarations -->
          <!--
          <provider>org.hibernate.ejb.HibernatePersistence</provider>
          <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
          -->
     
          <!-- Use this data source name for JBoss AS -->
          <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
          <!-- Use this data source name for Glassfish -->
          <!--
          <jta-data-source>jdbc/__default</jta-data-source>
          -->
          <properties>
             <!-- Properties for Hibernate (default provider for JBoss AS) -->
             <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
             <property name="hibernate.show_sql" value="true"/>
             <property name="hibernate.transaction.flush_before_completion" value="true"/>
             <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
     
             <!-- Properties for EclipseLink (default provider for GlassFish) -->
             <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
             <property name="eclipselink.logging.level" value="FINE"/>
     
          </properties>
       </persistence-unit>
    </persistence>

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    je sauvegarde widget en base de données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE IF NOT EXISTS `widget` (
      `id` bigint(20) NOT NULL,
      `description` varchar(255) DEFAULT NULL,
      `name` varchar(255) DEFAULT NULL,
      `partno` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    la ligne est incomplète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <persistence-unit name="..." transaction-type="JTA">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Merci de votre réponse, pourquoi doit on utiliser transaction-type="JTA"?

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    On n'est pas obligé d'utiliser JTA, on peut également mettre RESOURCE_LOCAL, mais s'il faut des transactions, il faut le préciser
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup pour votre aide

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    J'ai malheureusement toujours le même problème...

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    j'ai lu sur un autre forum que Glassfish nécessitait JTA, je ne pourrais pas l'affirmer, je n'utilise pas Glassfish et en plus j'utilise JTA...
    ce qui m'étonne dans le code que tu montres c'est l'injection de l'EntityManager,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Inject 
    @WidgetRepository 
    EntityManager widgetRepository;
    on utilise d'habitude
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @PersistenceContext(unitName="Habilis3MetierPU")
    protected EntityManager entityManager;
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    je n'utilise pas glassfish, j'utilise Jboss AS7

  12. #12
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Inject 
    @WidgetRepository 
    EntityManager widgetRepository;
    pour pouvoir faire mon persist...

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    oups, je me suis emmêlé les crayons... désolé
    pourquoi @inject ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    pas de soucis, d'après ce que j'ai pu lire ici et la, le @inject me permet d'avoir une référence à mon EntityManager dans ma classe non?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    J'ai la meme exception avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	@PersistenceContext(unitName="widgets")
    	EntityManager widgetRepository;

  16. #16
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    J'ai oublié de mettre mes fichiers WidgetRepository et WidgetRepositoryProducer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package knowledge.tuto1;
     
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
     
    import javax.inject.Qualifier;
    import static java.lang.annotation.ElementType.TYPE;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.ElementType.FIELD;
    import static java.lang.annotation.ElementType.PARAMETER;
     
    @Qualifier
    @Target({TYPE, METHOD, FIELD, PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface WidgetRepository {}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package knowledge.tuto1;
     
    import javax.ejb.Stateless;
    import javax.enterprise.inject.Produces;
    import javax.enterprise.inject.Disposes;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
     
    @Stateless
    public class WidgetRepositoryProducer
    {
       // NOTE cannot use producer field because Weld attempts to close EntityManager
       @PersistenceContext EntityManager em;
     
       public @Produces @WidgetRepository EntityManager retrieveEntityManager() {
          return em;
       }
     
       public void disposeEntityManager(@Disposes @WidgetRepository EntityManager em) {}
    }

  17. #17
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Peut etre que ca serait mieux que je parte d'un tuto comme celui la:
    http://miageprojet2.unice.fr/index.php?title=Programme_des_enseignements/Applications_Web/TP7_Applications_web_:_utilisation_d'une_base_de_donn%C3%A9es

    mais j'utilise Eclipse et pas netbean, et il y a plein de chose que je ne trouve pas

  18. #18
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 525
    Points
    9 525
    Billets dans le blog
    1
    Par défaut
    je crois que ce serait mieux de faire un truc simple... tu confonds un peu tout...

    Pour faire une synthèse, l'entity est manipulé via un entity manager dans un ejb (stateless ou stateful).
    cet ejb est utilisé dans ta servlet via une interface remote (le plus souvent)

    pour référencer un ejb, on utilise l'annotation @EJB ou du JNDI
    pour l'entity manager, on utilise @PersistenceContext
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    @Inject n'inject pas tout partout, en particulier les EntityManager en font partis, sauf si tu crée une extension d'annotation de @PersistenteContext de type producer, donc pas de traitement faveur
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @PersistenceContext
        private EntityManager entityManager;

    comme je vois que tu utilise CDI oublie pas de mettre un fichier beans.xml même vide dans ton web-inf


    Il est possible d'injecter un ejb sur une interface cela demande de fournir une annotation de qualifier sur l’implémentation pour créer un crochet en la reportant a coté du @Inject, mais si tu débute vas y pas a pas avant d'ajouter de la complexité et concentre toi sur @EJB.

  20. #20
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Merci pour votre réponse, j'ai fait un beans.xml. J'ai un autre problème en fait je pense que j'ai une persitence unit pour chacun de mes jar et donc les entités creer ne sont pas les mêmes,comment gérer un seul pu par ear?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/05/2011, 10h27
  2. java lang.NumberFormat Exception
    Par coold dans le forum JPA
    Réponses: 4
    Dernier message: 07/02/2010, 13h09
  3. erreur java.sql.sql Exception
    Par sana... dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 14/07/2008, 13h36
  4. JAVA Net Connect Exception
    Par diegosaure dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 08h25
  5. Réponses: 2
    Dernier message: 05/06/2004, 00h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo