2014-07-14 3 views
0

hashMap의 Managed-Bean 빌드로 돌아 왔습니다. (Creating a HashMap of type <String , Object>) 내가 관리되는 bean이 해시 맵의 응용 프로그램 범위 변수를 생성하는 클래스Managed Bean 우수 사례

public class AppProperties { 
    private String appRepID; 
    private String helpRepID; 
    private String ruleRepID; 
    private String filePath; 
    private Vector formNames; 
    private Database appDB; 
    // all the getters and setters 
} 

을 정의했습니다. Bean의 생성자에서 나는 여러 다른 장소에서 모든 정보를 수집하여 각 응용 프로그램 (키)에 대한 값을 만듭니다. repIDs 꽤 똑바로 전달됩니다. AppBD를 Application Scope 변수에 저장하는 것이 현명한 질문입니다. 스코프 된 변수에 Notes 객체를 저장해서는 안된다는 것을 읽었습니다. 여기에 문제가 있습니까? 둘째, 그런 경우라면 AppProperties에 DatabaseByReplicaID를 열 수있는 메소드를 추가 할 수 있습니다. 애플리케이션 데이터베이스를 가져 오는 메소드가 호출되면 데이터베이스 객체가 많은 수의 호출을 받게되므로 공정에 약간의 오버 헤드가 추가됩니다. 응용 프로그램의 수명주기에 많은 시간.

답변

5

오른쪽으로 Notes 개체를 범위 변수 및 bean 속성에 저장하면 안됩니다.

직렬화 할 수 없기 때문에 (특정 범위의 필수 항목 임) 수명주기 사이에 재활용됩니다. 보다 정확하게는 C 핸들을 기반으로하므로 XSP 엔진은 요청 - 응답주기 사이에 Notes 객체를 만들고 응답이 사용자에게 다시 쓰여지면 모두 재활용됩니다. 그들을 메모리에 보관하려고하면 서버에 '유독성'이됩니다.

Bean에서 메소드를 정의 할 수 있습니다 (예 : GetHelpDb()). 필요한 경우 언제든지 작성하여 리턴 할 수 있습니다. 엄청난 성능 비용이 아닙니다. Domino 서버는 데이터베이스에 대한 캐싱을 구현하기 때문에. 데이터베이스를 반복해서 열면 추가 디스크 I/O가 생성되지 않습니다.

이러한 상황에서 Notes 데이터와 상호 작용하는 가장 좋은 방법은 캐싱입니다. 필자는이 방법을 응용 프로그램에서 자주 사용합니다. 단일 메소드에서 값을 가져 와서 HashMap에 캐시하고 필요할 때 맵에서 값을 가져올 수 있습니다. getter 메서드를 사용하면 시간 제한 값을 확인하기 위해 시간 기반 값을 확인할 수도 있습니다.

+0

또한 bean은 요청 사이에 값을 저장하고 다시 가져와야하기 때문에 java.io.Serializable을 구현해야합니다. –

+0

@Paul - 예. My Bean이 수행합니다. 내 클래스 AppProperties는 Bean으로 가져옵니다. 그래서 AppProperties 클래스가 Bean에 의해 직렬화 될 것이라고 가정합니다. –

+0

예. 직렬화 된 객체로 가져 오려면 직렬화되어야합니다. –