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: J'ai essayé de mettre le fichier persistant.xml dans de nombreux endroits différents, en aucun cas. est là un moyen de charger manuellement la persistance.xml? strong> p> Le activateur strong> ressemble à ceci: p> Voici ce que ma structure de répertoire ressemble à: p>
8 Réponses :
Essayez d'utiliser Bundle-ClassPath comme ceci dans votre manifeste p>
Bundle-ClassPath:., /localisation/of/persistence.xml p>
Pas de chance. J'ai essayé: Bundle-Classpath: > Bundle-classePath :., /meta-inf/persistence.xml b> Bundle-ClassPath :., ./meta-inf/persistence.xml b> Bundle-ClassPath :., Meta-Inf B> Bundle-ClassPath: ../ Méta-Inf B> Bundle-ClassPath :., / Meta-Inf B> Bundle-ClassPath: . ,./Meta-inf b> Bundle-ClassPath:., C: \ Workspaces \ Osgijpa \ dao \ meta-inf \ persistence.xml b> Bundle-ClassPath :., C : \ Espaces de travail \ osgijpa \ dao \ meta-inf b>
Déplacez-vous la persistance.xml à la racine du paquet JAR? Cela devrait le ramasser
Le répertoire Meta-Inf ne figure pas sur la classe de classe. Cela devrait fonctionner en la plaçant simplement sous votre
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 :-)
Je n'utilise pas persistance.xml mais hibernate.cfg.xml qui est similaire: 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> 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")
Utilisez eclipselink et oubliez les implémentations hibernate et autres, car: P>
Vous devrez trop jouer avec le chargeur de classe ...
thread.CurrentThread (). SetContextClassloader em> (...) P> Li>
Vous serez tenté de définir l'attribut Bundle-ClassPath et d'ajouter des dépendances manuellement au lieu d'installer des paquets JAR. P> LI>
Vous obtiendrez le fournisseur non trouvé em> erreurs ou vous ne pourrez peut-être pas trouver persistance.xml em> p> li>
ul>
Tous les efforts ci-dessus pourraient ne pas fonctionner après de nombreuses tentatives. P>
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. P>
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
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.
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é. p>
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. P>
Je reçois le même problème. P>
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. P>
Voici le tutoriel: wiki.eclipse.org/eclipselink/examples/osgi/... a>
Vous devez définir la propriété (pour Hibernate, il sera différent): P>
javax.persistence.provider = org.apache.openjpa.persistence.persistenceProviderImpl p>
pour appeler: p>
persistance.createentityManagerFactory (EntityManagerFactoryName, propriétés) p>
Pour le faire fonctionner. P>
Et comme mentionné précédemment, vous avez besoin d'emballage de classier. Vous pouvez utiliser ClassloaderTityManager à partir de https://issues.apache.org/jira/browse/openjpa -1783 pour faire cela. P>
considère p>
Si vous utilisez EclipsLink JPA Osgi, votre manifeste.mf manquant de JPA-persistantnits Entrée. Ajouter p>
JPA-PERSISTENTENCELITSE: Postgres P>
dans le manifeste.mf.
p> li>
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;) p>