gpt4 book ai didi

scala - 如何从 Scala/Play 2.2 项目中使用 OrientDB?

转载 作者:行者123 更新时间:2023-12-04 15:34:31 26 4
gpt4 key购买 nike

我想试试 OrientDB在使用 SBT 构建的 Scala/Play 2.2 项目中。我如何将 OrientDB 集成到这个项目中?请记住,我对所有这些技术都不熟悉(我的背景主要是 Python/C#/JavaScript),所以我可以做一些手工:)

如果可能,最好将 OrientDB 安装为托管依赖项。如果可用,我还希望为数据库提供一个好的 Scala API。

一些从我的应用程序连接到 OrientDB 服务器的示例代码会很酷。

编辑:

我试过 Play with OrientDB Play 插件,但到目前为止没有成功。我所做的是(根据插件的 README ):

  • cd ~/local/play-2.2.1/
  • git clone git@github.com:ratcashdev/play-with-orientdb.git
  • cd play-with-orientdb/src
  • 添加 val orientDBVersion = "1.6.4"到 src/build.sbt
  • 将 project/build.properties 编辑为:sbt.version=0.13.0
  • 将project/plugins.sbt的最后一行改为:addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1")
  • 删除 project/Build.scala(因为这会导致构建错误)
  • play publish-local
  • 添加 "ratcash.net" % "play-with-orientdb_2.10" % "1.0-SNAPSHOT"libraryDependencies我的项目的 build.sbt 文件的设置
  • 添加 val orientDBVersion = "1.6.4"到我项目的 build.sbt 文件
  • 将我的项目的 conf/play.plugins 文件编辑为:10000:modules.orientdb.ODBPlugin
  • 将 OrientDB 配置添加到我项目的 conf/application.conf 文件中。
  • 通过 play run 运行我的项目
  • 访问本地主机:9000

  • 最后一步导致错误页面显示以下异常: java.lang.ClassNotFoundException: modules.orientdb.ODBPlugin .

    最佳答案

    我意识到我必须破解 Play with OrientDB plugin使其与 Play 2.2/SBT 0.13 一起工作,并最终使其工作,据我所知。我 fork 了原始项目并在 GitHub 上分享了我的更改.我在我的补丁下面粘贴了从 Play 2.2 使用它所必需的原始源代码:

     diff --git a/src/app/modules/orientdb/actions/ODBTransactionWrapper.java b/src/app/modules/orientdb/actions/ODBTransactionWrapper.java
    index 348276b..753317c 100644
    --- a/src/app/modules/orientdb/actions/ODBTransactionWrapper.java
    +++ b/src/app/modules/orientdb/actions/ODBTransactionWrapper.java
    @@ -6,14 +6,15 @@ import modules.orientdb.ODB.DBTYPE;
    import modules.orientdb.annotation.Transactional;
    import play.mvc.Action;
    import play.mvc.Http;
    -import play.mvc.Result;
    +import play.mvc.SimpleResult;
    +import play.libs.F.Promise;

    public class ODBTransactionWrapper extends Action<Transactional>
    {
    @Override
    - public Result call(Http.Context context) throws Throwable
    + public Promise<SimpleResult> call(Http.Context context) throws Throwable
    {
    - Result res = ok("Did nothing");
    + Promise<SimpleResult> res;
    //internalServerError();
    try {
    beforeInvocation();
    @@ -23,6 +24,7 @@ public class ODBTransactionWrapper extends Action<Transactional>
    System.out.println("exception happened.");
    e.printStackTrace();
    onInvocationException(e);
    + throw e;
    } finally {
    System.out.println("cleanup");
    invocationFinally();
    @@ -34,7 +36,6 @@ public class ODBTransactionWrapper extends Action<Transactional>
    DBTYPE type = this.getClass().getAnnotation(Transactional.class).db();
    if(type == DBTYPE.DOCUMENT || type == DBTYPE.OBJECT)
    Model.objectDB().begin();
    -
    }

    public void invocationFinally() {
    diff --git a/src/project/Build.scala b/src/project/Build.scala
    index f9301ee..c85e2c1 100644
    --- a/src/project/Build.scala
    +++ b/src/project/Build.scala
    @@ -1,17 +1,16 @@
    import sbt._
    import Keys._
    -import PlayProject._

    object ApplicationBuild extends Build {

    - val appName = "Play with OrientDB"
    + val appName = "play-with-orientdb"
    val appVersion = "1.0-SNAPSHOT"

    // IMPORTANT. The plugin can't be compiled without this
    - val orientDBVersion = "1.3.0-SNAPSHOT"
    + val orientDBVersion = "1.6.4"

    val appDependencies = Seq(
    - javaCore
    + //javaCore

    // disable JDBC and javaEBean
    //javaJdbc,
    diff --git a/src/project/build.properties b/src/project/build.properties
    index 82f1ca3..8cbb522 100644
    --- a/src/project/build.properties
    +++ b/src/project/build.properties
    @@ -1 +1 @@
    -sbt.version=0.12.2-RC2
    \ No newline at end of file
    +sbt.version=0.13.0
    \ No newline at end of file
    diff --git a/src/project/plugins.sbt b/src/project/plugins.sbt
    index 92ccea5..a815558 100644
    --- a/src/project/plugins.sbt
    +++ b/src/project/plugins.sbt
    @@ -5,4 +5,4 @@ logLevel := Level.Warn
    resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

    // Use the Play sbt plugin for Play projects
    -addSbtPlugin("play" % "sbt-plugin" % "2.1-RC2")
    \ No newline at end of file
    +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1")
    \ No newline at end of file

    我还没有真正使用这个插件,除了将它包含在我的应用程序中。我可以看到该插件能够在服务器启动时连接到 OrientDB,所以从这里开始它应该可以使用。

    关于scala - 如何从 Scala/Play 2.2 项目中使用 OrientDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562844/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com