2011-03-30 53 views
2

如何配置eclipselink以在swing應用程序內部直接在工作組環境內連接數據庫服務器。我目前正在使用這個,但是我的應用程序在一些事務後(20-30事務之後)凍結。 我的persistence.xml是,eclipselink jpa 2.0 with j2se swing應用程序凍結

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://192.0.0.1:3306/myhotel"/> 
     <property name="javax.persistence.jdbc.password" value="123"/> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 

我通過線程轉儲去它顯示了..

SwingWorker-pool-1-thread-10" daemon prio=6 tid=0x03143400 nid=0xbec in Object.wait() [0x052ff000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at org.eclipse.persistence.sessions.server.ConnectionPool.acquireConnection(ConnectionPool.java:102) 
    - locked <0x27d6d7e0> (a org.eclipse.persistence.sessions.server.ConnectionPool) 
    at org.eclipse.persistence.sessions.server.ServerSession.allocateReadConnection(ServerSession.java:477) 
    at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:525) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191) 
..................... 

也AWT線程甚至成爲wainting狀態

"AWT-EventQueue-0" prio=6 tid=0x02c6d400 nid=0xfcc in Object.wait() [0x033ae000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at org.eclipse.persistence.sessions.server.ConnectionPool.acquireConnection(ConnectionPool.java:102) 

請一些身體幫我! !

+1

莫非你的持久性相關的代碼是什麼?看起來你並沒有重新獲得已經獲得的連接.. – 2011-03-30 11:07:29

+0

EntityManagerFactory emf = Persistence.createEntityManagerFactory(「dbpers」); EntityManager em = emf.createEntityManager(); public void save(){ em.getTransaction()。begin(); em.persist(em); em.getTransaction()。commit(); } – jawath 2011-03-30 16:57:16

+0

我使用類級別的entitymanager。我如何釋放連接後,我提交保存以及如何打開新的實體管理器我必須從EntityManager創建它em = emf.createEntityManager(); ???? – jawath 2011-03-30 16:59:13

回答

5

默認連接池大小爲32個連接。如果您有> 32個活動事務,則下一個請求將一直等到連接釋放。你在你的EntityManager上調用close(),並在你的事務上調用commit()或rollback()?

包含完整的persistence.xml。

您還可以配置連接池等待時間來觸發異常,如果超過了池的大小,

「eclipselink.jdbc.connections.wait超時」或「eclipselink.connection-pool.default.wait 「(在2.2)

或增加池的大小,

」eclipselink.jdbc.connections.max「 或 」eclipselink.connection-pool.default.max「(在2.2)