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 :

[EJB+JPA+CDI]EntityManager ne s'injecte pas


Sujet :

JPA Java

  1. #1
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut [EJB+JPA+CDI]EntityManager ne s'injecte pas
    Bonjour à tous,

    j'ai un petit soucis avec un module DAO...
    J'ai un module EJB, prévu pour être déployé sur un EAP6, qui refuse d'injecter son entity manager, sans que je comprenne pourquoi...

    Le persistence.xml me semble être complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1"
    	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    	<persistence-unit name="test">
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    		<jta-data-source>jdbc/arquillian</jta-data-source>
    		<class>org.javacrea.gestioncontacts.pu.Contact</class>
    		<properties>
    			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
    			<property name="hibernate.show_sql" value="true" />
    		</properties>
    	</persistence-unit>
    </persistence>
    La classe de test qui vérifie la PU :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    @RunWith(Arquillian.class)
    public class TestPU {
     
    	@Deployment
    	public static JavaArchive createDeployment() {
    		return ShrinkWrap
    				.create(JavaArchive.class)
    				.addPackage(Contact.class.getPackage())
    				.addAsResource(EmptyAsset.INSTANCE, "beans.xml")
    				.addAsResource("test-persistence.xml",
    						"META-INF/persistence.xml")
    				.addAsResource("test-ds.xml");
    	}
     
    	private static Map<String, String> datas = new HashMap<String, String>();
     
    	@PersistenceContext
    	EntityManager em;
     
    	@Inject
    	UserTransaction utx;
     
    	@Before
    	public void preparePersistenceTest() throws Exception {
    		if(em==null){
    			System.out.println("Entity Manager non injecté!");
    		}
    		datas.put("François", "Delalleau");
    		datas.put("Yann", "Leroy");
    		clearData();
    		insertData();
    		startTransaction();
    	}
     
    	public void clearData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Dumping old records...");
    		em.createQuery("delete from Game").executeUpdate();
    		utx.commit();
    	}
     
    	public void insertData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Inserting records...");
    		for (String prenom : datas.keySet()) {
    			Contact contact = new Contact("Monsieur", prenom, datas.get(prenom));
    			em.persist(contact);
    		}
    		utx.commit();
    		// clear the persistence context (first-level cache)
    		em.clear();
    	}
     
    	public void startTransaction() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    	}
     
    	@SuppressWarnings("unchecked")
    	@Test
    	public void retrouverLesDeux(){
    		String query = "Select c from Contact c order by c.id";
    		List<Contact> result = em.createQuery(query).getResultList();
    		assertContainsLesDeux(result);
    	}
     
     
     
    	public void assertContainsLesDeux(List<Contact> result) {
    		Assert.assertEquals(datas.size(), result);
    		Map<String, String> resultContent = new HashMap<String, String>();
    		for(Contact contact : result){
    		resultContent.put(contact.getPrenom(), contact.getNom());
    		}
    		Assert.assertEquals(resultContent, datas);
    	}
     
    	@After
    	public void commitTransaction() throws Exception {
    	    utx.commit();
    	}
     
    }
    Ma console m'indique bien que l'EntityManager n'est pas injecté, et j'ai un nullpointer dès que j'appel l'une de ses méthode... J'ai essayé d'injecter d'autre choses, notamment l'EJB de DAO lui-même. Il s'injecte, mais j'ai aussi un nullpointeur dès que j'appel une méthode...

    Si quelqu'un a une idée...

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour

    As tu essayer de lui indiqué le nom de la PU a injecter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	@PersistenceContext(unitName = "test")
    	private EntityManager em;
    Si cela ne change rien, alors le fichier persistance.xml se trouve t'il bien dans le repertoire src/META-INF ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut
    Oui, j'ai essayé avec "name=test".
    Pour le fichier de persistence, l'emplacement de test-persistence.xml, que j'ai posté et qui ne sert qu'au test, est précisé dans le pom. META-INF/persistence.xml est son emplacement dans l'archive de test Arquillian.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par Cafeinoman Voir le message
    Oui, j'ai essayé avec "name=test".
    le problème vient peut être de la !
    Regarde l'exemple que j'ai donné dans mon post précédent c'est pas "name" mais "unitName" qu'il faut renseigner.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut
    j'ai répondu trop vite, mais non, l'erreur n'est pas là... N'ayant qu'une seul persistenceUnit associé, il n'y a d'ailleurs pas de raison qu'il ne la trouve pas...

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    as-tu essayé de mettre dans ton fichier de persistence.xml ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <persistence-unit name="test" transaction-type='JTA'>
    Eric

  7. #7
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut
    J'ai essayé, pareil...

    Et quand je le déploie sur le serveur, ça ne me renvoie aucune erreur...

    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
     
    18:28:26,220 INFO  [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final-redhat-2
    18:28:26,361 INFO  [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1
    18:28:26,424 INFO  [org.jboss.as] (MSC service thread 1-7) JBAS015899: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-SNAPSHOT) starting
    18:28:27,094 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found GestionContacts.jar in deployment directory. To trigger deployment create a file called GestionContacts.jar.dodeploy
    18:28:27,110 INFO  [org.xnio] (MSC service thread 1-2) XNIO Version 3.0.7.GA-redhat-1
    18:28:27,111 INFO  [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
    18:28:27,114 INFO  [org.xnio.nio] (MSC service thread 1-2) XNIO NIO Implementation Version 3.0.7.GA-redhat-1
    18:28:27,119 INFO  [org.jboss.remoting] (MSC service thread 1-2) JBoss Remoting version 3.2.18.GA-redhat-1
    18:28:27,140 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 29) JBAS010280: Activating Infinispan subsystem.
    18:28:27,146 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 37) JBAS011800: Activating Naming Subsystem
    18:28:27,148 INFO  [org.jboss.as.jsf] (ServerService Thread Pool -- 35) JBAS012605: Activated the following JSF Implementations: [main, 1.2]
    18:28:27,150 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 42) JBAS013171: Activating Security Subsystem
    18:28:27,164 INFO  [org.jboss.as.security] (MSC service thread 1-1) JBAS013170: Current PicketBox version=4.0.19.SP2-redhat-1
    18:28:27,175 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 46) JBAS015537: Activating WebServices Extension
    18:28:27,177 INFO  [org.jboss.as.connector.logging] (MSC service thread 1-8) JBAS010408: Starting JCA Subsystem (IronJacamar 1.0.23.Final-redhat-1)
    18:28:27,202 INFO  [org.jboss.as.naming] (MSC service thread 1-3) JBAS011802: Starting Naming Service
    18:28:27,204 INFO  [org.jboss.as.mail.extension] (MSC service thread 1-3) JBAS015400: Bound mail session [java:jboss/mail/Default]
    18:28:27,224 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 25) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
    18:28:27,255 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 25) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3)
    18:28:27,343 INFO  [org.apache.coyote.http11] (MSC service thread 1-8) JBWEB003001: Coyote HTTP/1.1 initializing on : http-localhost/127.0.0.1:8080
    18:28:27,353 INFO  [org.apache.coyote.http11] (MSC service thread 1-8) JBWEB003000: Coyote HTTP/1.1 starting on: http-localhost/127.0.0.1:8080
    18:28:27,464 INFO  [org.jboss.ws.common.management] (MSC service thread 1-6) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final-redhat-1
    18:28:27,490 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-10) JBAS010400: Bound data source [java:jboss/datasources/redorg/security]
    18:28:27,491 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-10) JBAS010400: Bound data source [java:jboss/datasources/gestioncontactsV2]
    18:28:27,491 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-13) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
    18:28:27,571 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-15) JBAS015012: Started FileSystemDeploymentService for directory /srv/jboss-eap-6.2/standalone/deployments
    18:28:27,574 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015876: Starting deployment of "GestionContacts.jar" (runtime-name: "GestionContacts.jar")
    18:28:27,579 INFO  [org.jboss.as.remoting] (MSC service thread 1-8) JBAS017100: Listening on 127.0.0.1:4447
    18:28:27,579 INFO  [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:9999
    18:28:27,778 INFO  [org.jboss.as.jpa] (MSC service thread 1-11) JBAS011401: Read persistence.xml for GestionContacts
    18:28:27,817 INFO  [org.jboss.weld.deployer] (MSC service thread 1-13) JBAS016002: Processing weld deployment GestionContacts.jar
    18:28:27,823 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-13) JNDI bindings for session bean named GestionContactsImpl in deployment unit deployment "GestionContacts.jar" are as follows:
     
    	java:global/GestionContacts/GestionContactsImpl!org.javacrea.gestioncontacts.dao.GestionContacts
    	java:app/GestionContacts/GestionContactsImpl!org.javacrea.gestioncontacts.dao.GestionContacts
    	java:module/GestionContactsImpl!org.javacrea.gestioncontacts.dao.GestionContacts
    	java:global/GestionContacts/GestionContactsImpl
    	java:app/GestionContacts/GestionContactsImpl
    	java:module/GestionContactsImpl
     
    18:28:27,889 INFO  [org.jboss.weld.deployer] (MSC service thread 1-14) JBAS016005: Starting Services for CDI deployment: GestionContacts.jar
    18:28:27,924 INFO  [org.jboss.weld.Version] (MSC service thread 1-14) WELD-000900 1.1.16 (redhat)
    18:28:27,938 INFO  [org.jboss.as.jpa] (ServerService Thread Pool -- 48) JBAS011402: Starting Persistence Unit Service 'GestionContacts.jar#GestionContacts'
    18:28:27,938 INFO  [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016008: Starting weld service for deployment GestionContacts.jar
    18:28:28,020 INFO  [org.hibernate.annotations.common.Version] (ServerService Thread Pool -- 48) HCANN000001: Hibernate Commons Annotations {4.0.1.Final-redhat-2}
    18:28:28,023 INFO  [org.hibernate.Version] (ServerService Thread Pool -- 48) HHH000412: Hibernate Core {4.2.7.SP1-redhat-3}
    18:28:28,025 INFO  [org.hibernate.cfg.Environment] (ServerService Thread Pool -- 48) HHH000206: hibernate.properties not found
    18:28:28,026 INFO  [org.hibernate.cfg.Environment] (ServerService Thread Pool -- 48) HHH000021: Bytecode provider name : javassist
    18:28:28,037 INFO  [org.hibernate.ejb.Ejb3Configuration] (ServerService Thread Pool -- 48) HHH000204: Processing PersistenceUnitInfo [
    	name: GestionContacts
    	...]
    18:28:28,123 INFO  [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (ServerService Thread Pool -- 48) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
    18:28:28,325 INFO  [org.hibernate.dialect.Dialect] (ServerService Thread Pool -- 48) HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL82Dialect
    18:28:28,331 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (ServerService Thread Pool -- 48) HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
    18:28:28,471 INFO  [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (ServerService Thread Pool -- 48) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
    18:28:28,474 INFO  [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (ServerService Thread Pool -- 48) HHH000397: Using ASTQueryTranslatorFactory
    18:28:28,500 INFO  [org.hibernate.validator.internal.util.Version] (ServerService Thread Pool -- 48) HV000001: Hibernate Validator 4.3.1.Final-redhat-1
    18:28:29,067 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 26) JBAS018559: Deployed "GestionContacts.jar" (runtime-name : "GestionContacts.jar")
    18:28:29,079 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
    18:28:29,079 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
    18:28:29,080 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-SNAPSHOT) started in 3118ms - Started 194 of 255 services (58 services are passive or on-demand)
    Aurais-je oublié une quelconque config?

  8. #8
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par Cafeinoman Voir le message
    Et quand je le déploie sur le serveur, ça ne me renvoie aucune erreur...
    Ok, mais pour moi cela ne veux rien dire, déployé ne veux pas dire exécuté !

    Une question me vient a l'esprit .... je ne connais pas Arquillian mais pour faire de l'injection, il faut que la classe soit un Bean et qu'elle soit donc instancier par un contener.
    Il se trouve que ta classe TestPU à juste une annotation @RunWith.
    Le problème ne viendrait il pas de la ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    Ok, mais pour moi cela ne veux rien dire, déployé ne veux pas dire exécuté !
    Je suis bien d'accord, mais je n'ai pas d'erreur à l'instanciation de la persistenceUnit, ce qui veut dire je pense qu'elle existe même s'il n'arrive pas à l'injecter.

    Citation Envoyé par Alkhan Voir le message
    Une question me vient a l'esprit .... je ne connais pas Arquillian mais pour faire de l'injection, il faut que la classe soit un Bean et qu'elle soit donc instancier par un contener.
    Il se trouve que ta classe TestPU à juste une annotation @RunWith.
    Le problème ne viendrait il pas de la ?
    Non non, c'est normal. En fait la classe de test n'est pas un EJB en soit, sinon on ne pourrait pas la faire fonctionner hors conteneur. Elle créé un micro-conteneur (défini sous le @Deployement) pour tester les EJB. Si ça t’intéresse, je te conseil l'excellent guide de démarrage de leur site.

  10. #10
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Ok merci !
    Mais du coup je ne vois pas d’où viens ton problème. Je serais peut être répondre le jour ou j'aurais essayé
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 629
    Par défaut
    Salut,

    j'ai fini par trouver... Mais avec tellement de modifs intermédiaires que je ne suis pas sur de la provenance du problème d'origine !
    le problème relevé à priori plus de l'injection de dépendances que de l'unité de persistance en elle même. Je reposte la forme finale du test, qui me renvoie maintenant une belle barre verte.
    Le test :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    @RunWith(Arquillian.class)
    public class TestPU {
     
    	@Deployment
    	public static JavaArchive createDeployment() {
    		return ShrinkWrap
    				.create(JavaArchive.class)
    				.addPackage(Contact.class.getPackage())
    				.addAsManifestResource("META-INF/test-beans.xml", "beans.xml")
    				.addAsResource("META-INF/test-persist.xml","META-INF/persistence.xml");
    	}
     
    	private static Map<String, String> datas = new HashMap<String, String>();
     
    	@PersistenceContext(unitName="GestionContacts")
    	EntityManager em;
     
    	@Inject
    	UserTransaction utx;
     
    	@Before
    	public void preparePersistenceTest() throws Exception {
    		System.out.println("Entity Manager injecte : "+(em!=null));
    		datas.put("François", "Delalleau");
    		datas.put("Prenom", "Nom");
    		clearData();
    		insertData();
    		startTransaction();
    	}
     
    	public void clearData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Dumping old records...");
    		em.createQuery("delete from Contact").executeUpdate();
    		utx.commit();
    	}
     
    	public void insertData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Inserting records...");
    		for (String prenom : datas.keySet()) {
    			Contact contact = new Contact();
    			contact.setPrenom(prenom);
    			contact.setTitre("Monsieur");
    			contact.setNom(datas.get(prenom));
    			em.persist(contact);
    		}
    		utx.commit();
    		em.clear();
    	}
     
    	public void startTransaction() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    	}
     
    	@Test
    	public void imprimerLesDeux(){
    		String query = "Select c from Contact c order by c.id";
    		@SuppressWarnings("unchecked")
    		List<Contact> result = em.createQuery(query).getResultList();
    		System.out.println(result.size());
    		for(Contact contact : result){
    			System.out.println(contact.toString());
    		}
    	}
     
    	@SuppressWarnings("unchecked")
    	@Test
    	public void retrouverLesDeux(){
    		String query = "Select c from Contact c order by c.id";
    		List<Contact> result = em.createQuery(query).getResultList();
    		for(Contact contact : result){
    			System.out.println(contact.toString());
    		}
    		assertContainsLesDeux(result);
    	}
     
     
     
    	public void assertContainsLesDeux(List<Contact> result) {
    		Assert.assertEquals(datas.size(), result.size());
    		for(Contact contact : result){
    			contact.toString();
    		}
    		Map<String, String> resultContent = new HashMap<String, String>();
    		for(Contact contact : result){
    			resultContent.put(contact.getPrenom(), contact.getNom());
    		}
    		Assert.assertEquals(resultContent, datas);
    	}
     
    	@After
    	public void commitTransaction() throws Exception {
    	    utx.commit();
    	}
     
    }
    Le arquilllian.xml (passage à des tests en remote sur le serveur)
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://jboss.org/schema/arquillian"
        xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
     
        <container qualifier="jboss" default="true">
            <configuration>
                <!-- property name="jbossHome">/srv/jboss-eap-6.2</property-->
            </configuration>
            <protocol type="Servlet 3.0">
                <property name="host">localhost</property>
                <property name="port">8080</property>
            </protocol>
        </container>
     
    </arquillian>
    et le persistence.xml

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1"
    	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    	<persistence-unit name="GestionContacts"
    		transaction-type='JTA'>
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    		<jta-data-source>java:jboss/datasources/gestioncontactsV2</jta-data-source>
    		<class>org.javacrea.gestioncontacts.pu.Contact</class>
    		<properties>
    			<property name="hibernate.hbm2ddl.auto" value="create" />
    			<property name="hibernate.show_sql" value="true" />
    		</properties>
    	</persistence-unit>
    </persistence>
    Le beans.xml est vide.

    Merci en tout cas pour vos idées et suggestions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/09/2009, 22h41
  2. JBoss + EJB + JPA
    Par ghnawfal dans le forum Wildfly/JBoss
    Réponses: 18
    Dernier message: 08/08/2008, 12h46
  3. Réponses: 4
    Dernier message: 02/08/2008, 18h56
  4. [EJB3] Injection @EJB dans le Client Web ne fonctionne pas
    Par warwink dans le forum Java EE
    Réponses: 9
    Dernier message: 04/12/2007, 00h28
  5. [JPA / Hibernate] Cascade qui ne cascade pas !
    Par dazz_x dans le forum Persistance des données
    Réponses: 1
    Dernier message: 11/09/2007, 13h35

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