我有一个游戏应用程序(play 2.0.4),它使用 Java jar 来完成所有与数据库相关的工作(JPA/Hibernate 4.1.7/PostgreSQL)。一切都很好,直到我意识到我正在使用默认连接池,并且我偶尔会收到似乎是由此导致的错误,所以我切换到 c3p0。当我这样做时,将新 jar 复制到 play 中,我得到以下异常:
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[ExceptionInInitializerError: null]]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [play_2.9.1.jar:2.0.4]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [play_2.9.1.jar:2.0.4]
at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor.jar:2.0.2]
at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1.jar:2.0.4]
at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor.jar:2.0.2]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor.jar:2.0.2]
Caused by: java.lang.ExceptionInInitializerError: null
at models.AuthenticatedUser$.auth(AuthenticatedUser.scala:67) ~[classes/:na]
at controllers.Application$$anonfun$2.apply(Application.scala:25) ~[classes/:na]
at controllers.Application$$anonfun$2.apply(Application.scala:24) ~[classes/:na]
at play.api.data.Mapping$$anonfun$verifying$2.apply(Form.scala:452) ~[play_2.9.1.jar:2.0.4]
at play.api.data.Mapping$$anonfun$verifying$2.apply(Form.scala:451) ~[play_2.9.1.jar:2.0.4]
at play.api.data.validation.Constraint.apply(Validation.scala:21) ~[play_2.9.1.jar:2.0.4]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: persistenceUnit] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:901) ~[hibernate-entitymanager-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57) ~[hibernate-entitymanager-3.5.6-Final.jar:3.5.6-Final]
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) ~[hibernate-jpa-2.0-api.jar:1.0.1.Final]
at com.xonami.rest.db.EMFactory.<clinit>(EMFactory.java:29) ~[xonami-api-0.2-SNAPSHOT.jar:na]
at models.AuthenticatedUser$.auth(AuthenticatedUser.scala:67) ~[classes/:na]
at controllers.Application$$anonfun$2.apply(Application.scala:25) ~[classes/:na]
Caused by: org.hibernate.HibernateException: Could not instantiate connection provider: org.hibernate.connection.C3P0ConnectionProvider
at org.hibernate.connection.ConnectionProviderFactory.initializeConnectionProviderFromConfig(ConnectionProviderFactory.java:178) ~[hibernate-core-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:102) ~[hibernate-core-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:51) ~[hibernate-entitymanager-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:91) ~[hibernate-core-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) ~[hibernate-core-3.5.6-Final.jar:3.5.6-Final]
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) ~[hibernate-core-3.5.6-Final.jar:3.5.6-Final]
我已经尝试在 play libs 文件夹中包含 hibernate 和 c3p0 jar,但无济于事(尽管我认为我正在将它们构建到我的 jar 中)。我猜也许 play 有一个旧版本的 c3p0,它是类路径中的第一个?我可以拿出来吗?如何?还有什么可能是错的吗?