0

Я использую Play 2.5.4 (кодирование на Java) и Hibernate 5.2.1 с JPA. Я попробовал добавлять Hibernate Search, но я продолжаю получать следующее сообщение об ошибке, когда я включаю его в build.sbt:Play Framework 2.5.4 Спящий режим поиска

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[ProvisionException: Unable to provision, see the following errors: 1) Error injecting constructor, java.lang.AbstractMethodError at play.db.jpa.DefaultJPAApi$JPAApiProvider.(DefaultJPAApi.java:39) at play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) while locating play.db.jpa.DefaultJPAApi$JPAApiProvider while locating play.db.jpa.JPAApi for parameter 0 at play.db.jpa.TransactionalAction.(TransactionalAction.java:20)
while locating play.db.jpa.TransactionalAction 1 error]] at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280) at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206) at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) at scala.concurrent.Promise$class.complete(Promise.scala:55) at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) at scala.concurrent.Promise$class.failure(Promise.scala:104) at scala.concurrent.impl.Promise$DefaultPromise.failure(Promise.scala:153) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:255) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:405) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) Caused by: com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) Error injecting constructor, java.lang.AbstractMethodError at play.db.jpa.DefaultJPAApi$JPAApiProvider.(DefaultJPAApi.java:39) at play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34) while locating play.db.jpa.DefaultJPAApi$JPAApiProvider while locating play.db.jpa.JPAApi for parameter 0 at play.db.jpa.TransactionalAction.(TransactionalAction.java:20)
while locating play.db.jpa.TransactionalAction 1 error at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051) at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:405) at play.core.j.DefaultJavaHandlerComponents.getAction(JavaAction.scala:142) at play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:91) at play.core.j.JavaAction$$anonfun$6.apply(JavaAction.scala:89) at scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:57) at scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:66) at scala.collection.mutable.ArraySeq.foldLeft(ArraySeq.scala:46) at play.core.j.JavaAction.apply(JavaAction.scala:89) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) at play.utils.Threads$.withContextClassLoader(Threads.scala:21) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:110) at scala.Option.map(Option.scala:146) at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110) at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) ... 14 common frames omitted Caused by: java.lang.AbstractMethodError: null at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:275) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:483) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at play.db.jpa.DefaultJPAApi.lambda$start$1(DefaultJPAApi.java:60) at java.lang.Iterable.forEach(Iterable.java:75) at play.db.jpa.DefaultJPAApi.start(DefaultJPAApi.java:59) at play.db.jpa.DefaultJPAApi$JPAApiProvider.(DefaultJPAApi.java:46) at play.db.jpa.DefaultJPAApi$JPAApiProvider$$FastClassByGuice$$dcd4cdbd.newInstance() at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40) at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61) at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:61) at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012) ... 32 common frames omitted

В build.sbt:

[...] 
    "org.hibernate" % "hibernate-core" % "5.2.1.Final", 
    "org.hibernate" % "hibernate-entitymanager" % "5.2.1.Final", 
    "mysql" % "mysql-connector-java" % "5.1.36", 
    //"org.hibernate" % "hibernate-search-orm" % "5.2.1.Final", -> Uncommenting this results in error 
    "org.apache.lucene" % "lucene-core" % "5.3.1", 
    "dom4j" % "dom4j" % "1.6" 
[...] 

application.conf

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://localhost/db?autoReconnect=true" 
[...db info...] 
db.default.jndiName = DefaultDS 
jpa.default = defaultPersistenceUnit 

hibernate.cfg.xml

<hibernate-configuration> 
    <session-factory> 
    <!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost/db?autoReconnect=true</property> 
    <property name="connection.username">###</property> 
    <property name="connection.password">###</property> 

    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 


</session-factory> 
</hibernate-configuration> 

persistence.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
       version="2.1"> 
     <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
      <non-jta-data-source>DefaultDS</non-jta-data-source> 
      <properties> 
       <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
     </properties> 

    </persistence-unit> 
</persistence> 

Я не могу найти хороший учебник о том, как использовать Hibernate Search с Play Framework 2.5+.

Спасибо!

LE:

Я sloved его с помощью:

... 
    "org.hibernate" % "hibernate-entitymanager" % "4.3.10.Final", 
    "org.hibernate" % "hibernate-search-orm" % "5.3.0.Final", 
... 

как предложено здесь: https://stackoverflow.com/a/30656145/6682875

+0

Не могли бы вы изменить вопрос, чтобы добавить весь трассировки стека? – marcospereira

+0

и пока вы на нем, объясните, какой API вы используете ... потому что если JPA, то вы используете ТОЛЬКО persistence.xml, а если Hibernate, то вы используете hibernate.cfg.xml. Это ИЛИ ИЛИ, не ОБА –

+0

@marcospereira Done – taviss

ответ

0

кажется, что некоторые вещи, которые отсутствуют в вашей конфигурации. Вот пример рабочей конфигурации, которую я использовал (только подстановленные настоящие имена). Обратите внимание, что hibernate.cfg.xml не используется.

build.sbt:

val hibernateVersion = "4.3.10.Final" 
val mySqlConnectorVersion = "5.1.36" 

libraryDependencies ++= Seq(
    javaJpa 
) 
... 
libraryDependencies ++= Seq(
    ... 
    "org.hibernate" % "hibernate-entitymanager" % hibernateVersion, 
    "mysql" % "mysql-connector-java" % mySqlConnectorVersion 
    ... 

application.conf:

# ~~~~~ 
# MySql 5.6 
db.default.driver=com.mysql.jdbc.Driver 
db.default.username="user" - put here your DB user name 
db.default.password="password" - put here your DB user password 
dbhosts="hostip:port" - put here your host and DB port 
dbschema="dbschema" - put here the exact case-sensitive name of the DB schema 
dbproperties="?autoReconnect=true" 
db.default.url="mysql://"${db.default.username}":"${db.default.password}"@"${dbhosts}"/"${dbschema}${dbproperties} 
db.default.jndiName=MyDS 
jpa.default=myDbPersistanceUnit 

persistence.xml:

<persistence-unit name="myDbPersistanceUnit" transaction-type="RESOURCE_LOCAL"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<non-jta-data-source>MyDS</non-jta-data-source> 
    <!--Model mapping (optional) like below--> 
    <!--class>persistence.models.SomeEntityClass</class>--> 
    .... 
<properties> 
    <!--Hibernate properties --> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
</properties> 

+0

Я не вижу никаких существенных отличий, кроме того, что я использую более новую версию спящего режима. Кроме того, из того, что я читал, hibernate-entitymanager и hibernate-search-orm должны быть одинаковой версии, и нет спящего режима для 4.3.10.Final. – taviss