2010-03-26 77 views
0

與我的RCP程序我遇到了問題,我想要在PC上運行多個副本。第一例非常好。 如果我啓動第二個實例,一切都很好,直到我想訪問數據庫。Eclipselink factory.createEntityManager()掛起多個實例運行

使用此代碼:

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

<?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> 

程序檔位一個的persistence.xml /不存在於第二個實例繼續超出此步驟:

EM =工廠.createEntityManager();

調試程序一步一步向我表明,在這一點上沒有任何反應。程序可能會暫停運行。我沒有超過1分鐘的視線....

你有什麼線索可能會導致這個檔位可能嗎?

回答

2

在調試器中,停止所有線程(選擇應用程序並單擊暫停按鈕),然後檢查哪個線程在Object.wait()中掛起。其中之一必須與你的問題有關。查看EclipseLink實例的堆棧軌跡以找出哪個實例。這可能會讓你知道發生了什麼。

+0

我不確定,但在我看來,它掛在jre6 \ lib \ rt.jar(沒有可用的源代碼)。 「this」具有值SocketInputStream。 所以有網絡套接字....(我猜測)有問題,但不應該拋出異常,而不是掛?我該如何繼續? – Raven 2010-03-26 11:47:36

+0

這意味着它會等待數據庫服務器響應。在流中進一步查看它等待的內容:登錄?它是否發送了一些SQL並等待執行?也許你的數據庫只允許你登錄一次。 – 2010-03-30 08:00:05