Je suis en train de développer un site Web utilisant java EE, qui sera déployé sur un serveur distant, j'essaie d'implémenter JPA dans l'application.
À des fins de test, j'aimerais créer une unité de persistance variable, de sorte que sur le déploiement local, l'application utilise mon serveur mySQL local, alors que sur le déploiement distant, elle utilisera le serveur mySQL fourni par le serveur. Le problème est cependant que je cours sur glassfish localement, et jboss distant, donc je ne peux pas rendre les noms JNDI de ressource pour les sources de données identiques (puisque jboss requiert "java: /" ou "java: jboss")/» comme préfixe, alors que GlassFish ne permet pas: 's dans les noms JNDI)unités de persistance variable JPA
un autre problème est que je ne suis pas simplement permis de créer 2 unités de persistance du même nom,
j'ai essayé de faire 2 unités de persistance différentes, mais le déploiement échoue car l'une des unités de persistance ne peut pas être résolue.
ci-dessous est mon persistence.xml à ce moment:
<persistence-unit name="LocalPU">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/website</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
</properties>
</persistence-unit>
<persistence-unit name="RemotePU">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:/website</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
</properties>
</persistence-unit>
donc ma question est, est-il possible d'avoir une volonté de entitymanager à l'une de ces unités de persistance, mais n'exige pas que les deux unités de persistance soient disponibles
EDIT:
environ 5 minutes après la publication de cette question, je l'ai trouvé un article qui suggère d'utiliser des variables d'environnement
cependantcela ne semble pas travailler dans GlassFish,
ce persistence.xml:
<persistence-unit name="LocalPU">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>${myds}</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
</properties>
</persistence-unit>
et la machine virtuelle Java-options -Dmyds=jndi/website
résultats dans l'erreur suivante:
Exception while preparing the app : Invalid resource : ${myds}__pm
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : ${myds}__pm
w ce qui m'amène à croire que les variables d'environnement ne peuvent pas être analysées dans glassfish (???)
Je ne sais pas pourquoi vous devez utiliser java:/site dans JBoss, car c'est quelque chose qui est assez cohérent entre les serveurs. Ce qui serait fait si le schéma de nommage sous-jacent est différent est d'utiliser un nom constant dans votre persistence.xml, jdbc/site web par exemple, et de le corriger avec des liens resource-ref dans des descripteurs de déploiement spécifiques au serveur. Voir http://docs.jboss.org/jbossas/jboss4guide/r1/html/ch3.chapter.html#ch3.ejbref.ex et http://docs.oracle.com/cd/E18930_01/html/821-2418 /beaoa.html – Chris
le deuxième lien que vous avez fourni m'a donné un aperçu pratique de la question apparemment dans glassfish, le "java:" préfixe est implicite, donc où j'utilise "jdbc/site Web" il est réellement analysé comme "java : jdbc/website " donc en utilisant" jboss/datasources/MySQLDS "et en renommant la référence à cela dans glassfish devrait (en théorie) fonctionner –