2010-01-05 2 views
1

Google App Engine에서 JDO를 사용하여 Java 객체를 데이터 저장소에 유지할 수 있습니다. 또한 JDO를 사용하여 객체를 byte[]으로 바꿔서 memcache에 넣거나 HTTP를 통해 보낼 수 있습니까?JDO를 사용하여 엔터티를 바이트 []로 직렬화 할 수 있습니까?

설명 : JDO 지속성에 대해 이미 주석을 작성한 클래스를 직렬화하려고합니다. 다른 직렬화 메커니즘을 사용하는 것은 불필요하게 노력을 복제하는 것처럼 보입니다. JDO/DataNucleus는 클래스에서 바이트 코드 조작을 사용하여 지연로드와 같은 기능을 제공하므로 까다로울 수 있습니다.

+0

JDO 객체를 낮은 수준의 데이터 저장소 엔터티 (프로토콜 버퍼를 사용하여 직렬화 가능)로 변환하는 인터페이스를 제공하는 기능 요청이 GAE 추적기에 있습니다. http://code.google.com/ – Thilo

답변

1

JDO는 객체를 데이터 저장소에 유지합니다. 그것의 일부로 필드가 "직렬화 된"것으로 표시 될 때 직렬화를 수행 할 수 있습니다. 하지만 데이터 저장소에 저장 될 때 직렬화되며 데이터 저장소에서 검색 될 때 역 직렬화됩니다. 왜 당신이 무언가를 직렬화하고 싶다면 직접하지 말아야합니다 ... 왜 JDO가 필요합니까?

+0

JDO에 대해 이미 주석을 달았 기 때문에 다른 직렬화 메커니즘을 사용하고 싶지 않습니다. 또한 JDO는 지연로드 및 "바이트 코드 향상"을 사용하므로 다른 클래스가 충돌없이 동일한 클래스에서 사용될 수 있는지 확실하지 않습니다. – Thilo

+0

JDO 주석과 바이트 코드 향상은 직렬화를 막기 위해 아무 것도하지 않습니다. 실제로 그들은 수업을 데이터 계층에서 사용하지 못하게하기 위해 엄청난 고통을 겪고 있습니다. 어느 쪽이든 어떤 직렬화 된 형태의 자바 객체를 가져 오는 JDO API는 없다. – DataNucleus

1

JDO 객체를 분리 가능으로 표시하고 직렬화를 구현 한 다음 캐시하려는 경우 detach()를 호출 한 다음 정상적으로 캐시 할 수있는 것처럼 보입니다. 나는 이것을 시도하지는 않았지만 토론 그룹에서 일하는 것으로 보인다.

또한 memcache와 함께 JDO 레벨 2 캐시를 사용 가능하게 설정하는 방법에 대한 좀 더 일반적인 논의가 있습니다. 그 작품이 일종의 결정적이지는 않지만 좋은 해결책이 될 수 있는지. 이에 대한 자세한 내용은 다음과 같습니다. http://groups.google.com/group/google-appengine-java/browse_thread/thread/13cb942ceb97dc/3ab7518edf6a8bc6