Lorsque je lance l'application, il ne s'agit pas de ces propriétés mais des propriétés par défaut dans glassfish-ressource.xml. J'utilise JPA avec des beans et des entités générés automatiquement par nebeans. Je veux changer de base de données à l'exécution.JPA EntityManagerFactory ne remplace pas le fichier persistence.xml
Voici sa ma classe session
package facade;
import entities.Tpe;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
/**
*
* @author Emmanuel
*/
@Stateless
public class TpeFacade extends AbstractFacade<Tpe> {
private EntityManager em;
@Override
public EntityManager getEntityManager() {
EntityManagerFactory emf=null;
Map properties = new HashMap();
properties.put("javax.persistence.transactionType", "JTA");
properties.put("javax.persistence.jdbc.driver", "jdbc:mysql://192.20.3.81:3306/piv?zeroDateTimeBehavior=convertToNull");
properties.put("javax.persistence.jdbc.url", "com.mysql.jdbc.Driver");
properties.put("javax.persistence.jdbc.database", "piv");
properties.put("javax.persistence.jdbc.user", "username");
properties.put("javax.persistence.jdbc.password", "password");
try {
emf = Persistence.createEntityManagerFactory("ConfigurationTPEPU", properties);
System.out.println("emfznezizzhzz "+emf.getProperties());
} catch (Exception e) {
}
em = (EntityManager) emf.createEntityManager();
return em ;
}
public TpeFacade() {
super(Tpe.class);
}
}
et le contenu de mon fichier de persistance
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ConfigurationTPEPU" transaction-type="JTA">
<jta-data-source>java:app/connexion81</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>
</persistence>
le contenu GlassFish-ressources.xml
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysql_piv_rootPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="serverName" value="localhost"/>
<property name="portNumber" value="3306"/>
<property name="databaseName" value="db1"/>
<property name="User" value="root"/>
<property name="Password" value="gsmcom"/>
<property name="URL" value="jdbc:mysql://localhost:3306/petroivoire?zeroDateTimeBehavior=convertToNull"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
</jdbc-connection-pool>
<jdbc-resource enabled="true" jndi-name="java:app/connexion81" object-type="user" pool-name="mysql_piv_rootPool"/>
</resources>
ce sera un plaisir si quelqu'un peut m'aider. ce trois jours que ce problème a arrêté ma progression. Et désolé pour mon anglais –
Qu'est-ce qui vous pose un problème? Vous avez défini une unité de persistance avec certaines propriétés MAIS les avez surpassées lors de la création de l'EMF, de sorte qu'elle utilise les remplacements si nécessaire. Tout comme les Javadocs disent que cela devrait être – DN1
Ce n'est pas un bon style Java EE que vous faites car vous n'utiliserez pas le pooling de connexion et l'EJB Stateless créera une instance EntityManagerFactory par pool. Pourquoi voulez-vous changer de base de données et ne pas utiliser la source de données? –