EclipseLink factory.createEntityManager () temporise avec plus d'une instance exécutant
-
22-09-2019 - |
Question
avec mon programme RCP j'ai le problème que je veux avoir plus d'une copie en cours d'exécution sur mon PC. La première instance fonctionne très bien. Si je commence à la deuxième instance, tout va bien jusqu'à ce que je veux accéder à la base de données.
En utilisant ce code:
..
Map properties = new HashMap();
properties.put("javax.persistence.jdbc.driver", dbDriver);
properties.put("javax.persistence.jdbc.url", dbUrl);
properties.put("javax.persistence.jdbc.user", dbUser);
properties.put("javax.persistence.jdbc.password", dbPass);
try {
factory = Persistence.createEntityManagerFactory(
PERSISTENCE_UNIT_NAME, properties);
} catch (Exception e) {
System.out.println(e);
}
em=factory.createEntityManager(); // the second instance stops here
...
avec un persistence.xml de
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="default">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>myclasshere</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.jdbc.read-connections.min" value="1" />
<property name="eclipselink.jdbc.write-connections.min" value="1" />
<property name="eclipselink.jdbc.batch-writing" value="JDBC" />
<property name="eclipselink.logging.level" value="SEVERE" />
<property name="eclipselink.logging.timestamp" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.thread" value="false" />
</properties>
</persistence-unit>
</persistence>
Les stalles du programme / ne continue pas en deuxième instance au-delà de cette étape:
em = factory.createEntityManager ();
Débogage l'étape du programme par étape m'a montré, que rien ne se passe à ce moment. le programme fonctionne peut-être dans un délai d'attente. Je nai été wainting pour plus de 1 minute ....
Avez-vous des indices qui pourraient faire en sorte que ce pourrait stalle?
La solution
Dans le débogueur, arrêtez toutes les discussions (sélectionnez l'application et cliquez sur le bouton de pause), puis vérifier quel thread se bloque dans Object.wait()
. L'un d'eux doit être lié à votre problème. Vérifiez les traces de pile pour les instances de EclipseLink pour savoir lequel. Cela pourrait vous donner une idée de ce qui se passe.