首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于google的Datanucleus,缺少org.datanucleus.store.rdbms.RDBMSStoreManager

用于google的Datanucleus,缺少org.datanucleus.store.rdbms.RDBMSStoreManager
EN

Stack Overflow用户
提问于 2014-01-21 21:01:28
回答 1查看 809关注 0票数 0

我正在尝试让datanucleus在google java应用程序中管理我的Google表。

遗憾的是,我收到以下错误消息:

代码语言:javascript
复制
org.datanucleus.exceptions.ClassNotResolvedException: Class
"org.datanucleus.store.rdbms.RDBMSStoreManager" was not found 
in the CLASSPATH. Please check your specification and your CLASSPATH.

但我们还是按规矩去吧。这是我的jdoconfig.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd">

<persistence-manager-factory name="transactions-optional">
    <property name="javax.jdo.PersistenceManagerFactoryClass"
        value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory" />
    <property name="javax.jdo.option.ConnectionURL" value="appengine" />
    <property name="javax.jdo.option.NontransactionalRead"
        value="true" />
    <property name="javax.jdo.option.NontransactionalWrite"
        value="true" />
    <property name="javax.jdo.option.RetainValues" value="true" />
    <property name="datanucleus.appengine.autoCreateDatastoreTxns"
      value="false" />
    <prop key="javax.jdo.option.Multithreaded">true</prop>
    <property name="datanucleus.cache.level2" value="true" />
    <property name="datanucleus.cache.level2.type" value="none"/>

    <property name="datanucleus.cache.level1.type" value="soft"/>
    <property name="datanucleus.appengine.storageVersion"
                 value="READ_OWNED_CHILD_KEYS_FROM_PARENTS"/>
</persistence-manager-factory>

<persistence-manager-factory name="cloud-sql">
    <property name="javax.jdo.PersistenceManagerFactoryClass"
        value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory" />
    <property name="javax.jdo.option.ConnectionDriverName"
         value="com.mysql.jdbc.GoogleDriver"/>
    <property name="javax.jdo.option.ConnectionUserName" value="root"/>
    <property name="datanucleus.autoCreateSchema" value="true"/>
</persistence-manager-factory>
</jdoconfig>

两个持久化管理器工厂声明是一个用于应用引擎非关系数据存储,一个用于google。

在构建我的SQLManager时抛出异常。构造函数状态

代码语言:javascript
复制
@Inject
public SQLManager(final NamedQueryProvider queryProvider) {
    super(queryProvider);
    final Map<String, String> properties = new HashMap();
    properties.put("javax.jdo.option.ConnectionURL", getConnectionUrl());
    pmFactory = JDOHelper.getPersistenceManagerFactory(properties,
            "cloud-sql");
}

您可以说:您必须从类路径中遗漏一个所需的罐子。然而,在我的pom.xml中

代码语言:javascript
复制
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-accessplatform-jdo-rdbms</artifactId>
    <version>3.3.4</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-rdbms</artifactId>
    <version>3.2.8</version>
</dependency>

第二个工件实际上是不需要的,因为第一个工件是由第一个工件扔进来的。我把它作为最初的解决办法,但它不起作用。

有人有类似的想法吗?似乎没有关于datanucleus+jdo+cloud sql的文档,但是由于我使用它访问GAE数据存储,所以我希望对云sql重用同样的文档。

编辑

这是堆栈跟踪的相关部分。不幸的是,我无法在日志中看到jars应用程序引擎正在寻找的内容。

代码语言:javascript
复制
Class "org.datanucleus.store.rdbms.RDBMSStoreManager" was not found in the CLASSPATH.
Please check your specification and your CLASSPATH.
org.datanucleus.exceptions.ClassNotResolvedException: Class
"org.datanucleus.store.rdbms.RDBMSStoreManager" was not found in the CLASSPATH. Please
check your specification and your CLASSPATH.
at org.datanucleus.JDOClassLoaderResolver.classForName(JDOClassLoaderResolver.java:245)
at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:679)
at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:290)
at org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.java:410)
at org.datanucleus.NucleusContext.initialise(NucleusContext.java:280)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.freezeConfiguration(JDOPersistenceManagerFactory.java:591)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.createPersistenceManagerFactory(JDOPersistenceManagerFactory.java:326)
at org.datanucleus.api.jdo.JDOPersistenceManagerFactory.getPersistenceManagerFactory(JDOPersistenceManagerFactory.java:256)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at javax.jdo.JDOHelper$16.run(JDOHelper.java:1965)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.invoke(JDOHelper.java:1960)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1128)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:960)
at com.mycompany.myproduct.mypackage.SQLManager.<init>(SQLManager.java:24)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-27 11:44:58

问题是数据核jar版本不匹配。

我在3.0.*版本中使用了datanucleus core、datanucleus api-jdo等,而datanucleus rdbms 3.2。自从我意识到我不需要它带来的所有jars之后,我已经消除了datanucleus accessplatform-jdo-rdbms的依赖,并将datanucleus rdbms降级为3.0.10版本。(看起来数据核-应用程序插件还不支持3.2系列,这就是为什么我更喜欢降级而不是升级)。

现在我可以连接到云sql了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21269013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档