Amazon S3、datanucleus、JDO 和嵌入式对象

发布于 2024-12-23 14:36:27 字数 3215 浏览 6 评论 0原文

我有一个带有嵌入成员的对象,我使用 RDBMS 和 MySQL 使其持久化,没有出现任何问题。

当我将数据存储更改为 S3(json 插件)时,出现以下异常:

Dec 30, 2011 9:50:30 AM org.datanucleus.state.JDOStateManagerImpl isLoaded
WARNING: Exception thrown by StateManager.isLoaded
This constructor is only for objects using application identity.
org.datanucleus.exceptions.NucleusUserException: This constructor is only for objects using application identity.
    at org.datanucleus.state.JDOStateManagerImpl.initialiseForHollowAppId(JDOStateManagerImpl.java:226)
    at org.datanucleus.state.ObjectProviderFactory.newForHollowPopulatedAppId(ObjectProviderFactory.java:119)
    at org.datanucleus.store.json.fieldmanager.FetchFieldManager.getObjectFromJSONObject(FetchFieldManager.java:322)
    at org.datanucleus.store.json.fieldmanager.FetchFieldManager.fetchObjectField(FetchFieldManager.java:250)
    at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2228)
    at myproject.MyObject.jdoReplaceField(Unknown Source)
    at myproject.MyObject.jdoReplaceFields(Unknown Source)
    at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:1949)
    at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:1976)
    at org.datanucleus.store.json.JsonPersistenceHandler.fetchObject(JsonPersistenceHandler.java:269)
    at org.datanucleus.state.JDOStateManagerImpl.loadFieldsFromDatastore(JDOStateManagerImpl.java:1652)
    at org.datanucleus.state.JDOStateManagerImpl.loadSpecifiedFields(JDOStateManagerImpl.java:1254)
    at org.datanucleus.state.JDOStateManagerImpl.isLoaded(JDOStateManagerImpl.java:1742)
    at myproject.MyObject.jdoGetmember_(Unknown Source)
    at myproject.MyObject.getMember(Unknown Source)

myproject.MyObject 中的 member_ 定义为:

@Persistent
@Embedded(members = {
...
})
private Member member_;

并且

@PersistenceCapable(detachable="true")
@EmbeddedOnly
public class Member implements Serializable {

(无应用程序身份,无密钥)

jdoconfig.xml 大致为:

<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">
  <persistence-manager-factory name="trans-optional">
    <property name="javax.jdo.PersistenceManagerFactoryClass"
              value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
    <property name="datanucleus.ConnectionURL"
              value="amazons3:http://s3.amazonaws.com/"/>
    <property name="datanucleus.ConnectionUserName"
              value="..."/>
    <property name="datanucleus.ConnectionPassword"
              value="..."/>
    <property name="datanucleus.cloud.storage.bucket"
              value="mybucket"/>
  </persistence-manager-factory>
</jdoconfig>

我去过 支持的功能 表,但我必须承认我并不完全理解它。

它是否说 json 插件不支持嵌入对象? 为什么我的嵌入对象需要具有应用程序标识?如果我用应用程序身份定义它们,我还会被要求提供密钥,但我不希望这样,我希望它们被嵌入。

任何帮助将不胜感激!

I have an object with embedded members that I'm making persistent without problems using RDBMS and MySQL.

When I change the datastore to S3 (json plugin) I get the following exception:

Dec 30, 2011 9:50:30 AM org.datanucleus.state.JDOStateManagerImpl isLoaded
WARNING: Exception thrown by StateManager.isLoaded
This constructor is only for objects using application identity.
org.datanucleus.exceptions.NucleusUserException: This constructor is only for objects using application identity.
    at org.datanucleus.state.JDOStateManagerImpl.initialiseForHollowAppId(JDOStateManagerImpl.java:226)
    at org.datanucleus.state.ObjectProviderFactory.newForHollowPopulatedAppId(ObjectProviderFactory.java:119)
    at org.datanucleus.store.json.fieldmanager.FetchFieldManager.getObjectFromJSONObject(FetchFieldManager.java:322)
    at org.datanucleus.store.json.fieldmanager.FetchFieldManager.fetchObjectField(FetchFieldManager.java:250)
    at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2228)
    at myproject.MyObject.jdoReplaceField(Unknown Source)
    at myproject.MyObject.jdoReplaceFields(Unknown Source)
    at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:1949)
    at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:1976)
    at org.datanucleus.store.json.JsonPersistenceHandler.fetchObject(JsonPersistenceHandler.java:269)
    at org.datanucleus.state.JDOStateManagerImpl.loadFieldsFromDatastore(JDOStateManagerImpl.java:1652)
    at org.datanucleus.state.JDOStateManagerImpl.loadSpecifiedFields(JDOStateManagerImpl.java:1254)
    at org.datanucleus.state.JDOStateManagerImpl.isLoaded(JDOStateManagerImpl.java:1742)
    at myproject.MyObject.jdoGetmember_(Unknown Source)
    at myproject.MyObject.getMember(Unknown Source)

member_ in myproject.MyObject is defined as:

@Persistent
@Embedded(members = {
...
})
private Member member_;

and

@PersistenceCapable(detachable="true")
@EmbeddedOnly
public class Member implements Serializable {

(no application identity, no key)

The jdoconfig.xml is roughly:

<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">
  <persistence-manager-factory name="trans-optional">
    <property name="javax.jdo.PersistenceManagerFactoryClass"
              value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
    <property name="datanucleus.ConnectionURL"
              value="amazons3:http://s3.amazonaws.com/"/>
    <property name="datanucleus.ConnectionUserName"
              value="..."/>
    <property name="datanucleus.ConnectionPassword"
              value="..."/>
    <property name="datanucleus.cloud.storage.bucket"
              value="mybucket"/>
  </persistence-manager-factory>
</jdoconfig>

I've been to the Supported Features table but I must admit I don't fully understand it.

Does it say that the json plugin does NOT supports embedded objects?
Why do my embedded objects need to have application identity? If I define them with application identity I'm also asked to provide a key and I don't want that, I want them to be embedded.

Any help will be much appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柒夜笙歌凉 2024-12-30 14:36:27

正如支持的功能表(对我而言)非常清楚地说明的那样,“嵌入式 PC”功能与 JSON 数据存储列存在交叉,因此该数据存储不支持它。显然,如果某些用户/公司想要这样的功能,他们可以

  1. 更新 JSON 插件来支持它,就像 ODF 所做的那样
    插件例如
  2. 有效的赞助商。

或者,不要将嵌入对象与该数据存储一起使用。

As the Supported Features table says very clearly (to me), there is a CROSS against the JSON datastore column for the feature "Embedded PC", hence it is not supported for that datastore. Obviously if some user/company wanted such a feature they could either

  1. Update the JSON plugin to support it, like was done for the ODF
    plugin for example
  2. Sponsor that work.

Alternatively, don't use embedded objects with that datastore.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文