0

我有一个游戏应用程序(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,它是类路径中的第一个?我可以拿出来吗?如何?还有什么可能是错的吗?

4

1 回答 1

0

根据您的日志,我认为您忘记添加hibernate-c3p0依赖项,可以通过编辑project/Build.scala文件来添加:

val appDependencies = Seq(
    "org.hibernate" % "hibernate-c3p0" % "4.1.7.Final"
    ...
  )

或者你也可以把它放到你的lib文件夹中。

于 2013-01-09T11:17:45.173 回答