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 :

JPA - persistence units en runtime


Sujet :

JPA Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut JPA - persistence units en runtime
    Bonjour,

    j'ai une application qui sera déployé 2 fois avec chacune sa propre BD.
    Une fois en route, je veux pouvoir sélectionner la bonne persistence unit à l'aide d'une variable que je récupère d'un fichier de config.

    En résumant, j'aimerais que unitName prenne en compte une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        @PersistenceContext(unitName = {DbToLoad})
        private EntityManager entityManager1;
    Comme ceci n'est pas possible, il y a-t-il une autre solution svp ?


    Merci !

    (EJB 3.1, JPA2.0)

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ton Dbtoload sera connu quand?

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    N'importe, dès le premier accès à la DB ou dès le démarrage de l'application.

    En fait, dépendant du nom de l'instance, je saurai quelle DB charger.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans ce cas tu n'a rien à faire de particulier. Branche ton persistence unit sur une datasource, et chaque instance configurera sa datasource à sa manière. C'est exactement le même principe que de séparer le dev du staging et de la prod. La "configuration" qui dépend de l'environnement se fait dans le conteneur.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    Salut,

    désolé pour le retard. Donc, j'ai enfin trouvé une solution adéquate.

    En utilisant un fichier de configuration, j'ai pu définir une clé/valeur que je remplace dans mon persistence.xml à l'aide de Maven. Je laisse le code, au cas où qn serait à la recherche de la solution.

    pom.xml parent :
    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
     
    <!--  This plugin allows to read from a config file and use the key (from the pair "key/value") as variable for the pom. -->
     ... 
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>properties-maven-plugin</artifactId>
      <version>1.0-alpha-2</version>
      <executions>
         <execution>
              <phase>initialize</phase>
              <goals>
    		 <goal>read-project-properties</goal>
    	  </goals>
    	  <configuration>
    	     <files>
    		  <file>${basedir}/config.properties</file>
    	     </files>
    	   </configuration>
    	   </execution>
    	   </executions> 
    </plugin>
    ...
    <dependencyManagement>
       <dependencies>
    	<dependency>
    		<groupId>org.codehaus.mojo</groupId>
    		<artifactId>properties-maven-plugin</artifactId>
    		<version>1.0-alpha-2</version>
    	</dependency>
    ...
    pom.xml jpa :
    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
     
    <build>
        <resources>
    	 <resource>
    		 <directory>src/main/java</directory>
    		 <filtering>true</filtering>
    	 </resource>
        </resources>
     
        <plugins>
    	 <plugin>
    		 <groupId>org.codehaus.mojo</groupId>
    		 <artifactId>properties-maven-plugin</artifactId>
    		 <version>1.0.0</version>
    	 </plugin>
    ...
    et finalement, persistence.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    <persistence-unit name="myUnit" transaction-type="JTA">
    	 <jta-data-source>${datasource}</jta-data-source>
    	 ...
    </persistence-unit>
    ...
    Il est aussi possible de travailler avec profils. En tout cas, j'ai choisi cette solution qui me semble propre.
    Elle permet de garder un code unique et à l'aide du fichier de config qui permet lors du build de faire la différence.

    Voila

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 112
    Par défaut
    J'oubliais de préciser, cette solution n'est pas une solution de changement de persistence en runtime ! (comme le titre l'indique)

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

Discussions similaires

  1. Persistence Unit dynamique
    Par thecaptain dans le forum JPA
    Réponses: 4
    Dernier message: 09/06/2011, 10h24
  2. Réponses: 2
    Dernier message: 01/08/2008, 10h35
  3. Erreur:There is no default persistence unit in this deployment.
    Par bmohcine dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 07/09/2007, 16h40
  4. nettoyer les persistence units
    Par toomsounet dans le forum NetBeans
    Réponses: 1
    Dernier message: 11/03/2007, 14h10
  5. [JBoss 4][EJB3] persistance.units NOTYETINSTALLED
    Par Zero dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 01/02/2007, 09h26

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