Amazon S3, datanucleus, JDO и встроенные объекты - PullRequest
1 голос
/ 30 декабря 2011

У меня есть объект со встроенными членами, который я сохраняю без проблем, используя 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)

member_ в myproject.MyObject определяется как:

@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 НЕ поддерживает внедренные объекты? Почему мои встроенные объекты должны иметь идентификацию приложения? Если я определяю их с помощью идентификатора приложения, меня также просят предоставить ключ, и я не хочу этого, я хочу, чтобы они были встроены.

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 30 декабря 2011

Как видно из таблицы «Поддерживаемые функции» (для меня), существует столбец CROSS для столбца хранилища данных JSON для функции «Встроенный ПК», поэтому он не поддерживается для этого хранилища данных.Очевидно, что если некоторые пользователи / компании хотели получить такую ​​функцию, они могли бы либо

  1. обновить плагин JSON для его поддержки, как это было сделано для плагина ODF, например
  2. Спонсор, который работает.

Либо не используйте встроенные объекты с этим хранилищем данных.

...