6
votes

Persistance.xml et osgi (équinoxe)

Je teste actuellement en utilisant OSGI. Je passe cela à travers Eclipse. Je veux avoir ma couche Dao dans le cadre d'une solution OSGI, mais ma première pierre d'obstruction est cette erreur: xxx

J'ai essayé de mettre le fichier persistant.xml dans de nombreux endroits différents, en aucun cas. toutes idées sur ce que je fais mal?

est là un moyen de charger manuellement la persistance.xml?

Le activateur ressemble à ceci: xxx

Voici ce que ma structure de répertoire ressemble à:

Voici mon manifeste .Mf xxx

hibernatebundle contient tous les pots hibernate et de persistance.

voici mon Persistance.xml xxx

choses que j'ai essayé dans la classe de classe du manifeste sans chance:

Bundle-ClassPath :. , Meta-Inf / persistence.xml

Bundle-ClassPath: ../ Méta-Inf / persistence.xml

< Strong> Bundle-ClassPath: / p>

Bundle-ClassPath:., méta-in F

Bundle-ClassPath: ../meta-infled

--ClassPath:., / Méta- Inf

Bundle-ClassPath :., ./meta-inf

--ClassPath:., C: \ espaces de travail \ \ Osgijpa \ dao \ meta-inf \ persistence.xml

Bundle-ClassPath :., c: \ espaces de travail \ Osgijpa \ dao \ meta-inf


0 commentaires

8 Réponses :


0
votes

Essayez d'utiliser Bundle-ClassPath comme ceci dans votre manifeste

Bundle-ClassPath:., /localisation/of/persistence.xml


2 commentaires

Pas de chance. J'ai essayé: Bundle-Classpath: > Bundle-classePath :., /meta-inf/persistence.xml Bundle-ClassPath :., ./meta-inf/persistence.xml Bundle-ClassPath :., Meta-Inf Bundle-ClassPath: ../ Méta-Inf Bundle-ClassPath :., / Meta-Inf Bundle-ClassPath: . ,./Meta-inf Bundle-ClassPath:., C: \ Workspaces \ Osgijpa \ dao \ meta-inf \ persistence.xml Bundle-ClassPath :., C : \ Espaces de travail \ osgijpa \ dao \ meta-inf


Déplacez-vous la persistance.xml à la racine du paquet JAR? Cela devrait le ramasser



0
votes

Le répertoire Meta-Inf ne figure pas sur la classe de classe. Cela devrait fonctionner en la plaçant simplement sous votre DIRIMER SRC . Si vous le souhaitez dans un emplacement séparé, vous devrez alors spécifier le point de classe Bundle pour inclure ce répertoire. Par défaut, le type de classe est '.'.


3 commentaires

Je viens d'essayer de déplacer le méta-inf fois au répertoire SRC .. toujours ne fonctionne pas. J'ai aussi essayé explicitement de pointer explicitement à la persistance.xml dans le paquet-classpath et cela ne fonctionne pas.


@Grasper - Ne déplacez pas le répertoire, déplacez le fichier de persistance.xml dans la source afin de pouvoir compiler.


Donc, je mets persistante.xml dans src, et j'ai "." sur la classe de classe et ça ne marche toujours pas. Merci pour ton aide :-)



1
votes

Je n'utilise pas persistance.xml mais hibernate.cfg.xml qui est similaire: xxx pré>

dans mon activateur je reçois le fichier via le contexte du paquet: Voici quelques exemples de code comment je le fais et référencez également que le fichier:> p> xxx pré>

Comme vous pouvez voir la ligne qui obtient le fichier de configuration est le suivant: p>

context.getBundle().getEntry("/src/main/resource/hibernate/hibernate.cfg.xml")


0 commentaires

6
votes

Utilisez eclipselink et oubliez les implémentations hibernate et autres, car:

  • Vous devrez trop jouer avec le chargeur de classe ... thread.CurrentThread (). SetContextClassloader (...)

  • Vous serez tenté de définir l'attribut Bundle-ClassPath et d'ajouter des dépendances manuellement au lieu d'installer des paquets JAR.

  • Vous obtiendrez le fournisseur non trouvé erreurs ou vous ne pourrez peut-être pas trouver persistance.xml

    Tous les efforts ci-dessus pourraient ne pas fonctionner après de nombreuses tentatives.

    Toutefois, avec EclipsLink, il s'agit d'une évidence, la mise en œuvre a été conçue pour fonctionner hors de la boîte dans un environnement OSGI et il n'y a pas de maux de tête de chargement de classe.


2 commentaires

Eclipselink est en effet le meilleur choix pour Osgi (au fait ... Son RI pour JPA 2). Selon l'El Use UserGuid, vous devez charger l'EMFactory avec ceci: HASHMAP Propriétés = Nouveau HASHMAP (); Propriétés.put (persistantunitproperties.classloader, ce.getClass (). GetClassloader ()); EntityManagerFactory = Nouvelle persistanceProvider (). CreatetentiyManagerFactory (Pu_Name, Propriétés);


Sauf Ecclipselink ne colle pas de contrats JPA et a des bugs dans ses fonctions les plus fondamentales (par exemple, sauvegarder, supprimer). Je ne peux que le recommander si cela ne vous dérange pas ou que vous êtes une personne d'essai et d'erreur.



1
votes

Vous devez avoir le répertoire contenant Meta-Inf sur la classe de classe. Chaque répertoire est recherché dans Meta-Inf et si trouvé, puis persistance.xml est recherché.

Si vous mettez "Meta-Inf" sur le path de classe, vous auriez alors besoin d'un autre méta-inf fois dans ce répertoire.


0 commentaires

0
votes

Je reçois le même problème.

Je pense que Eclipse Link est la meilleure option à utiliser dans un environnement OSGI. Et il n'y a pas de problème car vous travaillerez essentiellement avec la mise en œuvre de la JPA. Lorsque vous devez vous déplacer vers Hibernate, il suffit de remplacer Persintece.xml config et quelques Libs.




2
votes
  1. (une seule suggestion): mieux si vous utilisez une chargeuse paresseuse, faites plutôt le travail dans l'activateur. Par exemple, utilisez un singleton qui est invoqué dans le rétroducteur SimpleDaoimpl.
  2. Déplacez Meta-Inf / persistent.xml sous dossier SRC (SRC / Meta-Inf / persistent.xml) car dans le développement de dossier Meta-Inf, il ne fonctionne pas uniquement en mode Runtime.
  3. Si vous utilisez EclipsLink JPA Osgi, votre manifeste.mf manquant de JPA-persistantnits Entrée. Ajouter

    JPA-PERSISTENTENCELITSE: Postgres

    dans le manifeste.mf.

  4. Puis dans votre configuration de lancement définit le niveau de démarrage de org.eclipse.persistence.jpa.osgi (pour ecliselink 2.3.x sinon org.eclipse.persistence.jpa pour 2.1.x) à 2 et à un niveau de démarrage de Javax.Persistence à 1.

    Bonne chance, en fait, 2.3 a un problème dans le déploiement, ne gère pas Bundleresource: // xxxx URL :(, 2.1.2 fonctionne très bien;)


0 commentaires