2011-11-24 3 views
0

자바 객체 (및 해당 종속성!)를 투명하게 저장하는 데 사용할 수있는 opensource 라이브러리를 찾고 있는데, 이는 일종의 스냅 샷 파일 또는 db에 저장됩니다.Java 객체의 트리를 db 또는 파일로 저장하는 Opensource 라이브러리

예제 사용 사례 : 여러 객체, 플레이어, 점수, 위치 등의 게임 상태가 있습니다. 사용자가 "저장"을 클릭하면 이제 이러한 객체를 저장해야합니다 (저장 될 모든 객체는 주석을 달아서) 파일이나 DB에 저장하십시오. 시스템이 다운되거나 사용자 로그가 나중에 발생하면이 시점부터 복구 할 수 있어야합니다.

가능한 투명하고 효율적으로 처리 할 수있는 라이브러리를 찾고 있습니다. 거래 등은 필요하지 않습니다. 내 우선 순위 무료

  1. 하는 OpenSource, 좋은 문서 사용
  2. 용이성 것이다. 사용자가 뭔가 수정 한 후 개체를 수동으로 저장해야 할합니다. (들) 그가에있는 경우 중, 사소한 활동을해야한다
  3. 안정
  4. 스냅 샷에서 읽고 복구 쉬워야한다.

위의 요구 사항 중 4 가지 또는 적어도 좋은 부분을 모두 다루는 라이브러리가 있습니까? 나는 aspect 지향적 인 접근법에 관심이있다.

나의 유스 케이스에 대해 잘못된 q를 묻는가? 그것은 업계에서 매우 다르게 수행됩니까?

답변

1

표준 자바 직렬화 메커니즘을 사용할 수 있습니다. 저장하려는 모든 클래스가 태그 인터페이스 Serializable을 구현하면 객체의 그래프를 원하는만큼 투명하게 저장할 수 있습니다. 그것은 DB가 아니며, 파일이지만, 여러분은 항상이 객체들을 여러분의 응용 프로그램으로 다시 읽을 수 있으며, 아마 여러분을위한 최상의 (또는 첫 번째) 옵션 일 것입니다.

이 방법의 단점은 데이터가 바이너리, 즉 메모장을 사용하여 읽을 수 없다는 점입니다. 그리고 형식은 클래스에서 수행 된 변경에 매우 민감하므로 역/후방 호환성을 지원하는 것은 문제가 있습니다.

다른 가능성은 객체를 XML 또는 JSON으로 직렬화하는 것입니다. XML의 경우 JAXB 또는 XStream을 시도하십시오. JSON의 경우 here을 살펴보십시오.

+0

JSon이 좋은 옵션 인 것 같습니다. 이런 종류의 그래프를 nosql db에 저장하고 mongodb라고 말한 다음 다시 빨리 읽을 수 있습니까? 그것은 좋은 접근입니까? – Abe

1

당신은이 문제를 해결하기 위해 자바의 직렬화에 내장 사용할 수 있어야합니다. 자동으로 저장하려면 모델을 저장하여 저장하십시오. 이것은 심지어 프록시 (java.lang.reflect.Proxy)를 사용하여 "자동으로"수행 될 수 있습니다.

그러나 일반적으로 값이 자주 관련되어 있으므로 자동으로 상태를 저장하지 않는 것이 좋습니다. 자신이 어느 레벨에 있고 어느 수준까지 도달했는지 추적 할 수있는 진행 클래스를 상상해보십시오 (0 %, 25 %, 50 % 및 75 %).

이제 레벨 2 만 완료하면 진행률이 "레벨 3, 0 %"로 업데이트되어야합니다. 처음 레벨을 설정하면 진행 상태 (짧은 기간 동안)는 "레벨 3, 75 %"상태가되며, 처음으로 얼마나 멀리 설정하면 "레벨 2, 0 %"가됩니다. 프로그램이 해당 지점에서 멈 추면 사용자는 잘못된 상태가됩니다.

+0

자바 게임 서버에서 그렇게하는 방법입니까? 객체 그래프를 직렬화하여 (수동으로) 저장하십시오. 다시로드하십시오. – Abe

+0

상태는 몇 가지 방식으로, 일부 내장 된 메커니즘 또는 일부 다른 논리에 의해 직렬화됩니다 (안정성에 대해서는 후자가 더 일반적이라고 생각합니다). "수동으로"저장한다는 것은 무엇을 의미합니까? 사용자가 저장 버튼을 누를 필요는 없으며, 프로그램이 x 분마다 상태를 저장하거나 게임에서 특정 작업을 수행 할 수 있습니다. 왜 다시로드해야합니까? (이전 상태로 돌아가고 싶다면로드하고 즉시 다시로드 하시겠습니까?) –

+0

즉시 다시로드하고 싶지 않습니다. 수동으로 나는 실제로 프로그래머가 POJO를 업데이트 할 때마다 수동으로 저장 부분을 코딩해야한다는 것을 의미했다. 그것 대신 투명하게 aop 또는 그런 해결책으로 처리됩니다. 그러나 당신이 말했듯이, 그것은 일관성없는 국가로 이어질 수 있으며 나쁜 생각이었습니다. – Abe

관련 문제