0

Ich benutze Play 2.5.4 (Codierung in Java) und Hibernate 5.2.1 mit JPA. Ich habe versucht, das Hinzufügen Hibernate Search aber ich halte empfangen die folgende Fehlermeldung, wenn ich es in build.sbt aktivieren:Play Framework 2.5.4 Hibernate Suche

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

In 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> 

Ich kann nicht scheinen zu finden, eine gute Anleitung, wie Hibernate Search mit Play-Framework verwenden 2.5+.

Vielen Dank!

LE:

I sloved es unter Verwendung:

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

wie hier vorgeschlagen: https://stackoverflow.com/a/30656145/6682875

+0

Könnten Sie bitte die Frage bearbeiten, um den gesamten Stack-Trace hinzufügen? – marcospereira

+0

und während Sie gerade dabei sind, erklären Sie, welche API Sie verwenden ..., denn wenn JPA dann verwenden Sie nur Persistence.xml, und wenn Hibernate, dann verwenden Sie Hibernate.cfg.xml. Es ist entweder ODER, nicht beide –

+0

@Marcospereira Done – taviss

Antwort

0

Es scheint, dass einige Dinge in Ihrer Konfiguration fehlen. Hier ist ein Beispiel für funktionierende Konfiguration, die ich verwendet habe (nur echte Namen ersetzt). Achten Sie darauf, dass hibernate.cfg.xml nicht verwendet wird.

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

Ich sehe keine größeren Unterschiede, außer dass ich eine neuere Version von Hibernate verwenden. Aus dem, was ich gelesen habe, sollten hibernate-entitymanager und hibernate-search-orm dieselbe Version sein, und es gibt keine Hibernate-Suche nach 4.3.10.Final. – taviss