2010-03-26 4 views
0

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?

Répondre

2

Dans le débogueur, arrêtez tous les threads (sélectionnez l'application et cliquez sur le bouton de pause), puis vérifiez 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 d'EclipseLink pour savoir laquelle. Cela pourrait vous donner une idée de ce qui se passe.

+0

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

+0

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. –

Questions connexes