문제

나의 질문은 이상의 모범 사례에 대한 질문을 구현하는 방법을 소유하지 않은 관계로 Google App Engine.내가 사용하 JDO 하는 지속성과 같이 추천 google 문서 나도 유지의 소유되지 않은 관계는 다음과 같이

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable, UserDetails {
...

    @Persistent
    private List<Key> groups;
...
}

이제 내가 나가는 내 처지에 갔을 때는 쿼리를 개체 목록을 사용하여 그들은 키체입니다.그래서 때 나는 내 목록 그룹의 키기 위해서는 실제로 목록을 반환의 그룹 개체 내가 보기에 그 열쇠를 얻을 개체입니다.나의 질문은 무엇입의 추천 방법을 소유하지 않은 모양까지 모델에는 것은 어떨까요?

가 있어야의 인스턴스 PersistanceManagerFactory 에서 모체 그래서 내가 할 수 있는 조회?

가 있어야 인스턴스의 내 GroupDAO 개체 내에서 모체 그래서 내가 할 수 있는 모습까?

해야 하는 유틸리티를 이 유형의 조회?

나는 새로운 이 그래서 나는 단지 알고 싶은 가장 좋은 방법입니다.감사합니다.

도움이 되었습니까?

해결책

이상적으로, User 체 있는 방법을 반환하는 List<UnownedObject> 도록 호출자가 깨끗한 API 를 사용합니다.하는 방법 중 하나이 User 객체를 인스턴스의 DAO 그래서 그것을 요구할 수 있 DAO 쿼리를 수행.

이렇게하기 위해서는, PersistenceManager 할 수 없습 폐쇄가 끝날 때까지의 요청을 합니다.이렇게 하는 방법 중 하나를 만드는 것입 블릿 필터:

public class PersistenceManagerFilter implements Filter { 
  public void init(FilterConfig filterConfig) throws ServletException {
  }

  public void destroy() {
  }

  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain)  throws IOException, ServletException {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
      request.setAttribute("pm", pm);
      chain.doFilter(request, response);
    } finally {
      pm.close();
    }
  }
}

할 수 있습니다 다음 주입 PersistenceManager 귀하의 DAO.당신이 사용하는 경우 쥬스와 당신은 할 수 있습니다:

@RequestScoped
public class UserDao {
  private final PersistenceManager pm;

  @Inject
  UserDao(PersistenceManager pm) {
    this.pm = pm;
  }

  public User getUser(parameters) {
    Key key = createKey(parameters);
    User user = pm.getObjectById(User.class, key);
    user.setUserDao(this);
    return user;
  }
}

이 작품은 최우 UserDao 에서와 같은 패키지 User 그래서 User.setUserDao() 할 수 있 패키지 범위가 있습니다.을 결정할 수 있습 설정 PersistenceManagerUser 체 대신 UserDao.

다음을 만들어야 합 쥬스와 모듈을 바인딩 PersistenceManager:

public class PersistenceManagerModule extends AbstractModule {
  @Override 
  protected void configure() {
  }

  @Provides @RequestScoped
  PersistenceManager providePersistenceManager(HttpServletRequest request) {
    return (PersistenceManager) request.getAttribute("pm");
  }
}

마지막으로 당신을 구성해야 Google App Engine 사용하는 쥬스와.

이것은 하나의 가능한 방법으로 그것을 할 수 있습니다.당신이 될 수 있는 더 똑똑했다 providePersistenceManagerPersistenceManager 로 저장 요구 특성에 대 servlet 필터를 만들기 PersistenceManager (필터는 아직도 닫).당신은 또한 servlet 필터를 얻을 쥬스와 인젝터 피할 수 있도록 사용 setAttribute()getAttribute() 고 대신 사용하여 더 유형-안전 API 를 사용합니다.

다른 팁

Google 추천합니다 싱글 톤 peristencemanagerFactory 만들기. 나는 당신의 모델에 PMF를 고수하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top