2011-03-30 78 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)