【问题标题】:Errors in using Datanucleus Rest API使用 Datanucleus Rest API 时出错
【发布时间】:2012-06-16 19:14:51
【问题描述】:

当我在本地 Appengine 开发服务器中对 Datanucleus Rest 资源执行 Http POST 时,服务器会抛出此错误:

Caused by: java.lang.ClassNotFoundException: org.datanucleus.NucleusContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 37 more

从表面上看,平台不允许在 appengine 上使用 Datnuclues Rest API?

编辑: pom中的数据核:

<dependency>
    <groupId>com.google.appengine.orm</groupId>
    <artifactId>datanucleus-appengine</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-core</artifactId>
    <version>3.0.0-release</version>
</dependency>

<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-api-jpa</artifactId>
    <version>3.0.0-release</version>
</dependency>
<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jpa_2.0_spec</artifactId>
    <version>1.0</version>
</dependency>

        <!-- Required by Datanucleus REST API -->
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-rest</artifactId>
            <version>2.0.0-release</version>
        </dependency>
        <dependency>
            <groupId>net.sf.flexjson</groupId>
            <artifactId>flexjson</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-json</artifactId>
            <version>2.0.0-release</version>
        </dependency>

以下是 WEB-INF/lib 文件夹中与 DN 相关的 jar:

  • datanucleus-rest-2.0.0-release.jar
  • datanucleus-json-2.0.0-release.jar
  • datanucleus-core-3.0.0-release.jar
  • datanucleus-appengine-2.0.0.jar
  • datanucleus-api-jpa-3.0.0-release.jar

编辑:

通过使用 v3.0 DN 依赖项修复了初始问题。

但是,现在当我尝试从 DN servlet 访问 REST 资源时,它会引发以下错误:

Error : An error occurred trying to instantiate an instance of the API adapter "org.datanucleus.api.jdo.JDOAdapter" (perhaps you dont have the requisite datanucleus-api-XXX jar in the CLASSPATH?) : {1}
org.datanucleus.exceptions.NucleusUserException: Error : An error occurred trying to instantiate an instance of the API adapter "org.datanucleus.api.jdo.JDOAdapter" (perhaps you dont have the requisite datanucleus-api-XXX jar in the CLASSPATH?) : {1}

【问题讨论】:

    标签: java google-app-engine datanucleus


    【解决方案1】:

    因此,您使用了某些版本的 datanucleus-api-rest(大概是 3.x),而您没有必要版本的 datanucleus-core(也是 3.x)。这通常是 ClassNotFoundException 的意思

    【讨论】:

    • 我将依赖项添加到 POM 中,现在我收到此错误:java.lang.ClassNotFoundException: org.datanucleus.api.rest.RestServlet
    • 我已将 POM 和 jar 列表添加到问题中,可能在运行时加载的 jar 存在一些兼容性问题。
    • 当你使用 datanucleus v3.0 和其他 jars 时,为什么要使用 datanucleus-rest 2.0?最好只使用 datanucleus-api-rest v3.0 和 datanucleus-core v3.0
    • 我不确定 Google Appengine 是否支持 Datanucleus v3.0
    • 您正在使用 GAE JPA 插件 v2.0,并且 使用 DataNucleus v3.0,所以是的,它可以在那里工作。事实上,如果你从 SVN 构建他们的插件 v2.1,它使用 DataNucleus v3.1。
    猜你喜欢
    • 2012-07-22
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2019-01-25
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多