Apache Tapestry-스토리지

모든 웹 애플리케이션에는 사용자 객체, 사용자 환경 설정 등과 같은 특정 사용자 데이터를 저장할 수있는 방법이 있어야합니다. 예를 들어 장바구니 애플리케이션에서 사용자가 선택한 항목 / 제품은 사용자가 선호 할 때까지 임시 버킷 (카트)에 저장되어야합니다. 제품을 구입합니다. 항목을 데이터베이스에 저장할 수 있지만 모든 사용자가 선택한 항목을 구매하지 않기 때문에 너무 비쌉니다. 따라서 항목을 저장 / 유지하기위한 임시 조치가 필요합니다. Apache Tapestry는 데이터를 유지하는 두 가지 방법을 제공합니다.

  • 지속성 페이지 데이터
  • 세션 저장

둘 다 장점과 한계가 있습니다. 다음 섹션에서 확인합니다.

지속성 페이지 데이터

지속성 페이지 데이터는 요청간에 단일 페이지에 데이터를 유지하는 간단한 개념이며 다음과 같이 호출됩니다. Page Level Persistence. 다음을 사용하여 수행 할 수 있습니다.@Persist 주석.

@Persist 
public int age;

필드에 @Persist 주석이 추가되면 필드의 값이 요청 전체에 걸쳐 유지되며 요청 중에 값이 변경되면 다음에 액세스 할 때 반영됩니다. Apache Tapestry는 @Persist 개념을 구현하기위한 다섯 가지 유형의 전략을 제공합니다. 그들은 다음과 같습니다-

  • Session Strategy − 데이터는 세션을 사용하여 유지되며 기본 전략입니다.

  • Flash Strategy− 데이터는 Session을 사용하여도 유지되지만 수명이 매우 짧습니다. 데이터는 하나의 후속 요청에서만 사용할 수 있습니다.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Client Strategy − 데이터는 URL 쿼리 문자열, 양식의 숨겨진 필드 등과 같이 클라이언트 측에 유지됩니다.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Hibernate Entity Strategy− 데이터는 Hibernate 모듈을 Entity로 사용하여 유지됩니다. 엔티티는 Hibernate에 저장되고 참조 (Java 클래스 이름 및 기본 키)는 토큰으로 저장됩니다.HttpSession. 엔티티는 HttpSession에서 사용 가능한 토큰을 사용하여 복원됩니다.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • JPA Entity Strategy− 데이터는 JPA 모듈을 사용하여 유지됩니다. 엔티티 만 저장할 수 있습니다.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user;

세션 저장

세션 저장소는 여러 페이지 마법사의 데이터, 로그인 한 사용자 세부 정보 등과 같이 페이지에서 사용할 수 있어야하는 데이터를 저장하는 데 사용되는 고급 개념입니다. 세션 저장소는 복잡한 개체를 저장하는 것과 간단한 값을 저장하는 두 가지 옵션을 제공합니다.

  • Session Store Object − 복잡한 개체를 저장하는 데 사용됩니다.

  • Session Attributes − 간단한 값을 저장하는 데 사용됩니다.

세션 저장소 개체 (SSO)

SSO는 다음을 사용하여 만들 수 있습니다. @SessionStore주석. SSO는 개체 유형을 사용하여 개체를 저장합니다. 예를 들어Cart Object카트 클래스 이름을 토큰으로 사용하여 저장됩니다. 따라서 복잡한 개체는 응용 프로그램에 한 번만 저장할 수 있습니다 (사용자 당 하나씩).

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

SSO는 전문 저장소이며 복합 / 특수 개체 만 저장하는 데 사용해야합니다. 단순 데이터 유형은 SSO를 사용하여 저장할 수도 있지만 문자열과 같은 단순 데이터 유형을 저장하면 애플리케이션에 하나의 "문자열"값만 저장됩니다. 응용 프로그램에서 단일 "문자열"값을 사용하는 것은 불가능합니다. Apache Tapestry가 세션 속성을 제공하므로 간단한 데이터 유형을 사용할 수 있습니다.

세션 속성

세션 속성을 사용하면 데이터를 유형 대신 이름으로 저장할 수 있습니다.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

기본적으로 세션 속성은 필드 이름을 사용하여 세션의 데이터를 참조합니다. 아래와 같이 주석 매개 변수로 참조 이름을 변경할 수 있습니다.

public class MyPage { 
   @SessionAttribute("loggedInUserName") 
   private String userName; 
}

세션 참조로 이름을 사용할 때의 주요 문제 중 하나는 실수로 둘 이상의 클래스 / 페이지에서 동일한 이름을 사용할 수 있다는 것입니다. 이 경우 저장된 데이터가 예기치 않게 변경 될 수 있습니다. 이 문제를 해결하려면 클래스 / 페이지 이름 및 패키지 이름과 함께 이름을 사용하는 것이 좋습니다.com.myapp.pages.register.email여기서 com.myapp.pages는 패키지 이름이고 register는 페이지 / 클래스 이름이며 마지막으로 email은 가변 (저장 될) 이름입니다.