игровой фреймворк 2.4.2 + Spring-data-neo4j-rest

I'm trying to use spring-data-neo4j-rest with Play Framework 2.4.2. I'm getting the following exception.

I used the same dependencies, controller, repository and entity in a regular java program and successfully created nodes in Neo4J database. Using it with Play gives me this exception.

AbstractApplicationContext class used by Play is different than the one the Java program uses.

[ERROR] [08/09/2015 23:08:20.215] [application-akka.actor.default-dispatcher-3] [ActorSystem(application)] Uncaught fatal error from thread [application-akka.actor.default-dispatcher-3] shutting down ActorSystem [application]
java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V
    at org.springframework.context.expression.StandardBeanExpressionResolver.<init>(StandardBeanExpressionResolver.java:98)
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:553)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at controllers.Application.index(Application.java:17)
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(Routes.scala:95)
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(Routes.scala:95)
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:136)
    at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:127)
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:70)
    at play.http.DefaultHttpRequestHandler$1.call(DefaultHttpRequestHandler.java:20)
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94)
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:94)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
    at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40)
    at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
    at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32)
    at scala.concurrent.impl.Future$.apply(Future.scala:31)
    at scala.concurrent.Future$.apply(Future.scala:492)
    at play.core.j.JavaAction.apply(JavaAction.scala:94)
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104)
    at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103)
    at scala.Option.map(Option.scala:146)
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103)
    at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524)
    at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524)
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560)
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560)
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:536)
    at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:536)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)
    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)

Это строки в build.sbt для зависимостей

libraryDependencies += "org.springframework.data" % "spring-data-neo4j-rest" % "2.3.1.RELEASE"
libraryDependencies += "org.springframework.data" % "spring-data-neo4j" % "2.3.1.RELEASE"

applicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:util="http://www.springframework.org/schema/util"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/data/neo4j
    http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package="entities"/>
<neo4j:repositories base-package="entities"/>
<context:annotation-config/>
<tx:annotation-driven mode="proxy"/>
<neo4j:config graphDatabaseService="graphDatabaseService" base-package="entities"/>
<bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
    <constructor-arg index="0" value="http://localhost:7474/db/data" />
    <constructor-arg index="1" value="neo4j" />
    <constructor-arg index="2" value="myneo4j" />
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

Application.java:

public class Application extends Controller {
    static UserController userController;
    public Result index() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        userController = (UserController) context.getBean("userController");
        userController.createUser();
        return ok("done!");
    }
}

UserController.java:

@Controller
public class UserController {
    @Autowired  UserRepository users;
    public void createUser() {
        User newUser = new User();
        newUser.setName("chai");
        newUser.setUsername("chai.nadig");
        users.save(newUser);
    }
}

User.java:

@NodeEntity
public class User {
    @GraphId
    Long id;
    String name;
    String username;
}

person Chai Nadig    schedule 10.08.2015    source источник
comment
Похоже на проблему зависимости между игрой и новой версией фреймворка Spring? 4.0.7?   -  person Michael Hunger    schedule 10.08.2015
comment
@MichaelHunger Я пробовал spring-data-neo4j-rest 3.3.2 и 2.3.1 и то, и другое. по-прежнему получаю ту же ошибку. Не нашел 4.0.7 для spring-data-neo4j-rest   -  person Chai Nadig    schedule 10.08.2015
comment
Я имел в виду spring-framework: 4.0.7, поскольку оттуда взяты классы выражения spel.   -  person Michael Hunger    schedule 10.08.2015
comment
Ох, ладно. как запретить Play использовать классы из Spring 4.0.7?   -  person Chai Nadig    schedule 10.08.2015


Ответы (1)


Я получил игровой фреймворк для работы с neo4j с помощью этого плагина:

https://github.com/tuxBurner/play-neo4jplugin

person Chai Nadig    schedule 16.09.2015