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 :

PersistenceUnit différents selon l'application embarquant l'EJB-JAR


Sujet :

JPA Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 24
    Points : 18
    Points
    18
    Par défaut PersistenceUnit différents selon l'application embarquant l'EJB-JAR
    Bonjour,

    J'aurais besoin de conseils ou de pistes pour résoudre le problème suivant :

    Environnement : WebLogic 10.3, JPA (provider = openjpa 1.2), EJB 3.0, maven 3

    Initialement, j'avais un EJB-JAR (appelons le monBelEJBJAR), qui rendait certains services à une application (appelons la appA), et qui gérait 2 entities. Il possédait son persistence.xml où était définit le persistenceUnit utilisé dans l'EJB, persistenceUnit où était renseigné la datasource (appelons la datasourceA).
    Niveau DB, les tables correspondantes se trouvaient dans le schéma de l'application (appelons le schémaA).

    Tout ça marchait comme sur des roulettes.

    Mais voilà le hic : pour une autre application (appB) déployée sur le même serveur WL, j'aurais besoin des services de monBelEJBJAR. Seulement, j'aimerais que les entities soient persistées dans schémaB (schéma de appB), et non dans schémaA). Et c'est là qu'est tout le noeud de mon problème : je ne peux pas garder la même datasource dans le persistenceUnit.

    J'ai quelques pistes, mais aucune qui ne me semble être LA solution...

    1. Via Maven, aller placer dans monBelEJBJAR le persistence.xml où le nom JNDI de la datasource est une property qui serait différente pour appA et appB
    2. Rendre le scope du persistenceUnit global, en le mettant dans un jar se trouvant dans le /lib de chaque ear
    3. Utilisation de EntityManagerFactory??
    4. ???

    Pour le 1 et le 2, ce qui ne me plait pas dans l'histoire, c'est de devoir sortir le persistenceUnit du jar qui va l'utiliser. Pour le moment, je ne peux pas utiliser la solution 2 car j'ai une dépendance sur un autre EJBJAR sur lequel je n'ai pas la main et qui ne définit pas de unitName dans son annotation @PersistenceContext --> il trouve donc 2 persistenceUnits.
    La demande de modification pour ajouter le unitName a été demandée, mais Dieu sait quand elle sera faite...

    Bref, auriez-vous des suggestions, des conseils, des remarques, des pistes pour résoudre ce problème de manière efficace et "propre"?

    Si mes explications ne sont pas assez claires, n'hésitez pas à me demander plus d'informations.

    Merci de m'avoir lu.

    Bien à vous,

    Romain

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Ma question va peut être paraitre idiote mais pourquoi ne peux tu pas garder la même datasource dans le persistence.xml ?
    Est-ce que la définition de ta datasource est faite dans le persistence.xml et non dans webLogic ?
    Si je suis bien cette logique, cela veux-t-il également dire que sur une autre plateforme tapant sur une autre base de données, le persistence.xml serait différent ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par NoClassDefFound Voir le message
    Ma question va peut être paraitre idiote mais pourquoi ne peux tu pas garder la même datasource dans le persistence.xml ?
    Est-ce que la définition de ta datasource est faite dans le persistence.xml et non dans webLogic ?
    Si je suis bien cette logique, cela veux-t-il également dire que sur une autre plateforme tapant sur une autre base de données, le persistence.xml serait différent ?
    Bonjour,

    Etant donné que les deux applications appA et appB seront déployées sur le même serveur WL, elles ne peuvent utiliser les mêmes datasources : ça aurait pour conséquence que appA et appB utiliseraient les mêmes DB/schémas, ce que je veux justement éviter.

    Après avoir fait des recherches sur le net, et avoir discuté du problème avec d'autres personnes autrement plus expérimentées que moi, nous n'avons toujours trouvé de solutions "propres"... Pour le moment, on va s'en sortir en bidouillant les JAR avec maven...

    Je trouve quand même cela vraiment dommage que ce ne soit pas possible autrement. Je ne dois pas être le seul à vouloir faire ce genre de choses...

    Bref, la discussion est toujours ouverte, et si vous avez d'autres pistes, n'hésitez pas

    Bien à vous,

    Romain

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    D'accord, on est donc bien dans un cas de partitionnement ou multi tenancy.
    Je ne suis pas spécialiste d'OpenJPA mais il semble y avoir un module nommé Slice permettant de gérer la persistance distribuée. As tu déjà regardé de ce côté ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 940
    Points : 4 361
    Points
    4 361
    Par défaut
    Essayez un projet maven multi-modules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    parent
    |-> domain : jar avec les @Entity
    |-> app1 (qui dépendra de domain) war/ear et contient le persistence.xml qui accède à la DB/schema 1
    |-> app2 (qui dépendra de domain) war/ear et contient le persistence.xml qui accède à la DB/schema 2
    ...
    |-> appN...

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/03/2013, 10h28
  2. Réponses: 17
    Dernier message: 08/11/2010, 12h58
  3. [Interface graphique]Composant différents selon le PC
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/08/2005, 10h05
  4. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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