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 démarre la deuxième instance, tout va bien jusqu'à ce que je veux accéder à la base de données.Eclipselink factory.createEntityManager() se bloque avec plusieurs instances en cours d'exécution
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 = usine .createEntityManager();
Déboguer le programme étape par étape m'a montré, que rien ne se passe à ce stade. Peut-être que le programme court dans un délai d'attente. Je n'ai pas été wainting pendant plus de 1 minute ....
Avez-vous des indices ce qui pourrait causer ce décrochage pourrait?
Je ne suis pas sûr, mais il me semble qu'il se bloque dans jre6 \ lib \ rt.jar (aucune source disponible). "this" a la valeur SocketInputStream. Donc, il y a quelque chose de mal avec les sockets réseau .... (je devine) mais ne devrait-il pas lancer une exception au lieu de suspendre? Comment puis-je continuer? – Raven
Cela signifie qu'il attend que le serveur de base de données réponde. Regardez plus loin dans le flux ce qu'il attend: Login? A-t-il envoyé du SQL et attend l'exécution? Peut-être que votre DB vous permet juste de vous connecter une fois. –