JPA: créer EntityManagerFactory de propriétés

je suis en utilisant JPA dans un BOCAL-Projet et utilisé le persistence.xml pour l'installation de mon EntityManager.

Mais depuis l'persistence.xml est à l'intérieur du BOCAL après la construction, il est très compliqué pour l'utilisateur de modifier les paramètres par la suite. Donc, je suis à la recherche d'une solution où je peux configurer ma connexion sur un propertyfile qui est chargé lors de l'exécution.

Je suis tombé sur cette solution sur le web:

Map properties = new HashMap();

//Configure the internal EclipseLink connection pool
properties.put(JDBC_DRIVER, "oracle.jdbc.OracleDriver");
properties.put(JDBC_URL, "jdbc:oracle:thin:@localhost:1521:ORCL");
properties.put(JDBC_USER, "user-name");
properties.put(JDBC_PASSWORD, "password");

Persistence.createEntityManagerFactory("unit-name", properties);

Qui est la solution que je cherchais, mais il me manque une chose: Dans mon persistence.xml j'ai aussi déclarer un nom de schéma sur un fichier de mappage:

persistence.xml:

<persistence version="2.0" ...>
  <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>...</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="..."/>
      <property name="javax.persistence.jdbc.password" value="..."/>
      <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
      <property name="javax.persistence.jdbc.user" value="..."/>
    </properties>
    <mapping-file>META-INF/orm.xml</mapping-file>
  </persistence-unit>
</persistence>

orm.xml:

<entity-mappings ...>
 <persistence-unit-metadata>
  <persistence-unit-defaults>
   <schema>SCHEMA_NAME</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings>

Donc ma question c'est en gros: Est-il une propriété que je peux utiliser pour définir le schéma au moment de l'exécution, tout comme je le fais avec les autres propriétés?

Ou est-il même une meilleure solution?

Merci d'avance!

OriginalL'auteur Sebastian | 2013-08-01