2009-06-09 2 views
3

설정 : 데이터베이스에 최대 절전 모드로 유지되는 개체 (AProduct)가 있습니다. 이 객체는 저장소에 저장된 다른 객체 (AComponent)를 참조합니다. 제품의 데이터베이스 테이블에는 구성 요소의 ID 만 저장해야합니다. 제품을로드하면 저장소에서 올바른 구성 요소를로드하려고합니다.저장소에서 UserType 개체를 최대 절전 모드로로드하십시오.

지금까지의 솔루션은 ID 만 저장하도록 구성 요소의 UserType을 만드는 것입니다. 지금까지는 쉽습니다. ID를 가지고 있기 때문에 구성 요소를로드하는 것도 중요하지 않습니다.

내 문제는 ComponentUserType에서 저장소에 대한 링크를 얻는 방법입니다.

java와 Hibernate/Annotations를 사용하고 있지만 솔루션이 독립적 일 수 있습니다.

+0

저장소에 대해 더 자세히 설명해 주시겠습니까? –

+0

저장소는 xml-source의 일부 객체를로드하는 런타임 저장소입니다. 저장소를 초기화하려면 클래스 로더와 XML 소스 경로가 필요합니다. 저장소를 싱글 톤 (singelton)으로 사용하는 것은 지금까지 한 가지 방법이었습니다. 애플리케이션 당 하나의 저장소 만 가지고있었습니다. 나는 사용자 유형 내에서 최대 절전 모드 구성으로 정보를 얻는 방법이 있기를 바랐다. – cornz

답변

1

"저장소"데이터베이스가 아닌 다른 외부 소스를 의미한다고 가정합니다. 웹 서비스 또는 뭔가? 어쨌든 저장소에 대한 링크가 모든 제품 객체에 대해 동일한 정적 구성 인 경우 구성을 유지하기 위해 정적 접근 방법 (예 : "getInstance()")을 사용하여 단일 객체를 만들 수 있습니다. 그런 다음 UserType 객체는 저장소 구성을 단일 객체에서 가져올 수 있습니다. Spring과 같은 의존성 삽입 프레임 워크를 사용하고 있다면, 그것을 사용하여 속성 파일이나 다른 것들로부터 싱글 톤을 초기화 할 수있다. 더 나은 대안은 UserType에 직접 설정을 푸시하기 위해 Spring (또는 Guice 등)을 사용하는 것입니다. 하지만 UserType 객체 라이프 사이클은 Hibernate에 의해 제어되기 때문에 까다로울 수 있습니다.

저장소 링크가 각 제품마다 다른 경우 ID와 함께 데이터베이스에 저장하는 것이 좋습니다. 이를 수행하는 한 가지 방법은 ID 저장소 쌍을 캡슐화하는 클래스는 물론 구성 요소에 대한 참조를 작성하는 것입니다. 그런 다음 해당 클래스를 제품 클래스의 속성 유형으로 사용하고 Hibernate UserType 클래스를 ID 및 링크를 각각 보유하는 두 개의 열로 매핑하십시오.

0

응용 프로그램 스택을 초기화하기 위해 Spring Framework를 사용하고 있습니까? 그렇다면 SingletonBeanFactoryLocator를 확인하십시오. 그러면 Spring과 친숙한 방식으로 응용 프로그램 리소스를 사용할 수 있습니다.

http://www.jdocs.com/spring/2.0.6/org/springframework/beans/factory/access/SingletonBeanFactoryLocator.html

당신이 봄을 사용하지 않는 경우, 당신의 애플리케이션 스택 어딘가에 정적 클래스에서 노출의 ThreadLocal을 사용으로 보일 것이다. UserType과 함께 사용하기 전에 저장소가 ThreadLocal에 바인딩되어 있는지 확인해야합니다.

관련 문제