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

Spring Java Discussion :

pb injection entityManager dans un web service


Sujet :

Spring Java

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut pb injection entityManager dans un web service
    Bonsoir,
    voila mnt j'ai 2 jours que je glaire avec la création d'un web service qui permet d'ajouter un enregistrement dans base de données avec le framework JPA (hibernate)
    voici tous les éléments du projet :

    L'entité que j'utilise pour ajouter l'enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity
    public class Town {
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	Long id;
    	String name;
    	int population;
            // getters/setters
    }
    Une classe dao :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Repository
    @Transactional
    public class TownDao {
    	private EntityManager entityManager ;
     
    	@PersistenceContext(name="testWebService")
    	public void setEntityManager(EntityManager entityManager) {
    		this.entityManager = entityManager;
    	}
    	public void save(Town town){
    		entityManager.persist(town);
    	}
     
    }
    Les fichiers de configuration de spring
    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
    <bean id="dataSource"
    		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName" value="${connection.driver_class}" />
    		<property name="url" value="${connection.url}" />
    		<property name="username" value="${connection.username}" />
    		<property name="password" value="${connection.password}" />
    	</bean>
     
    	<bean id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="persistenceUnitName" value="testWebService" />
    		<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    		<property name="dataSource" ref="dataSource" />
    		<property name="loadTimeWeaver">
    			<bean
    				class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    		</property>
    		<property name="jpaVendorAdapter" ref="vendorAdapter" />
    	</bean>
     
    	<bean id="vendorAdapter"
    		class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    		<property name="databasePlatform" value="${hibernate.dialect}" />
    		<property name="showSql" value="${show_sql}" />
    		<property name="generateDdl" value="true" />
    	</bean>
     
    	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory" />
    	</bean>
     
    	<bean		class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
    	<tx:annotation-driven/>
            <context:annotation-config />
    	<context:component-scan base-package="com.test.dao"  />
     
    	<context:property-placeholder location="classpath:jdbcConfig.properties" />
    Un dossier META-INF qui contient le fichier persistence.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <persistence-unit name="testWebService">
    		<class>com.gise.model.Town</class>		
    	</persistence-unit>
    j'ai ajouté dans le fichier web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    			/WEB-INF/classes/applicationContext*.xml
    		</param-value>
    	</context-param>
     
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    avec eclipse j'ai crée un nouveau web service.

    après avoir générer le fichier .wsdl

    j'ai pu consommer le le fichier ".wsdl" mais j'ai ce pb

    un nullpointerexception avec la valeur de entityManager dans la classe TownDao.

    La question comment faire la jointure entre un web service et les beans de spring ??

    S.V.P
    Help!!!!!!!!!!!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2010
    Messages : 20
    Points : 12
    Points
    12
    Par défaut essaie ça
    Salut, j'ai eu ce probleme des tas de fois ..alors sans doute que cela pourra t'aider :
    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
    @ContextConfiguration(locations = "classpath*:testContext.xml")
    public class Ariane{
     
    	/** The _singleton. */
    	private static Ariane _singleton = null;
     
    	/** Contexte défini par Spring dans testContext.xml. */
    	private static ApplicationContext appContexte; 
     
        /** Objet permettant de créer un entityManager. */
    	private EntityManagerFactory entityFactory ; 
     
        /** The entity manager. */
        @PersistenceContext
        private EntityManager entityManager;
     
        /** The log. */
        private final Log log = LogFactory.getLog(getClass());
     
        /**
         * Instantiates a new ariane.
         * Cree le contexte de test decrit dans testContext.xml.
         */
        private Ariane() {
            super();
            if (Ariane.appContexte==null){
            	Ariane.appContexte = new ClassPathXmlApplicationContext("testContext.xml"); 
            	entityFactory = (EntityManagerFactory) Ariane.appContexte.getBean("testEntityManagerFactory");
            	entityManager = entityFactory.createEntityManager();
            	log.info("Contexte ArianeTEST créé avec SUCCES !!");
            }        
        }
     
        /**
         * Méthode de création de l'instance unique (singleton).
         * 
         * @return single instance of AbstractArianeTest
         */
        public static Ariane getTestInstance(){
        	if (Ariane._singleton == null){
        		Ariane._singleton =  new Ariane();
        	}
        	return Ariane._singleton;
        }
        /**
         * Méthode de suppression de l'instance unique.
         */
        public static void removeTestInstance(){
        	Ariane._singleton = null;
        }
     
        /**
         * Recupere l'entityManager pour les classes de test.
         * 
         * @return the entity manager
         * @return
         */
    	public EntityManager getEntityManager() {
    		return entityManager;
    	}
    }
    ========================================
    Pour utiliser cette classe , ajoute cela à ton DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class TownDao extends Ariane{
    ========================================
    et récupère l'entityManager en écrivant :
    this.entityManager = Ariane.getTestInstance
    ========================================

    J'utilise ça pour injecter l'entityManager dans mes classes de tests mais ça devrait te dépanner pour l'instant

    Evidemment tu peux renommer la classe en SpringContexte par exemple, c'est plus parlant pour toi

    Bonne continuation

    Stéphane

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Un grand merci shogatsu

    en faite, le pb c'était que la classe TownDao, elle peut pas être un bean et un web service à la fois car l'instanciation de celle-ci est faite par le conteneur axis2.(Comme ça on perd les annotations de spring)

    d'où, il fallait ajouter une classe TownDaoWs dont le contenu est comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class TownDaoWs {
    private static TownDao dao;
     
    public void static setDao(TownDao dao){this.dao = dao;}
     
    public void ajouterTown(Town town){dao.save(town);}
     
    }
    mnt, ce qu'il reste, il faut récupérer une instance de bean TownDao et cella à travers son constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class TownDao {
    public  TownDao(){TownDaoWs.setDao(this);}
     
    }
    non !!

    Si qlq'un possède une autre idée meilleure, je suis preneur

    j'espère que ça pourra aider

Discussions similaires

  1. methode a differentes signatures dans un web service
    Par afrold dans le forum Services Web
    Réponses: 6
    Dernier message: 14/08/2008, 17h54
  2. authentification dans un web service
    Par sophiesophie dans le forum Services Web
    Réponses: 2
    Dernier message: 08/08/2008, 08h37
  3. Session dans les web services
    Par casper_mc dans le forum Services Web
    Réponses: 1
    Dernier message: 27/06/2008, 21h46
  4. probleme dans mon web service
    Par am@123 dans le forum Services Web
    Réponses: 2
    Dernier message: 06/05/2007, 19h31
  5. [C#2.0] Comment rendre obligatoire un element dans un Web Service
    Par cosmos38240 dans le forum Services Web
    Réponses: 1
    Dernier message: 02/03/2007, 16h27

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