Interface DirStateFactory

Interface DirStateFactory

public interface DirStateFactory
extends StateFactory

바인딩할 객체의 상태와 그에 해당하는 속성을 얻기 위한 팩토리를 나타내는 인터페이스예요. JNDI 프레임워크는 객체 팩토리를 통해 객체 구현을 동적으로 로드할 수 있게 해 줘요. DirStateFactorygetStateToBind() 메서드에 Attributes 인스턴스를 공급하고 반환받을 수 있게 함으로써 StateFactory를 확장해요. DirStateFactory 구현은 DirContext 서비스 공급자가 사용하도록 만들어졌어요. 호출자가 DirContext.bind()로 객체를 바인딩할 때, 객체와 함께 바인딩할 속성 집합도 지정할 수 있어요. 바인딩할 객체와 속성은 어떤 팩토리의 getStateToBind() 메서드에 전달돼요. 팩토리가 그 객체와 속성을 처리하면 바인딩할 대응하는 객체·속성 쌍을 반환해요. 팩토리가 그 객체를 처리하지 않으면 null을 반환해야 해요. 예를 들어 호출자가 프린터 관련 속성 몇 개와 함께 프린터 객체를 바인딩할 수 있어요.

ctx.rebind("inky", printer, printerAttrs);

ctx의 LDAP 서비스 공급자는 DirStateFactory를 사용하고(DirectoryManager.getStateToBind()를 통해 간접적으로) 여기에 printer와 printerAttrs를 줘요. LDAP 디렉터리용 팩토리는 printer를 속성 집합으로 바꾸고 그걸 printerAttrs와 병합할 수 있어요. 그런 다음 서비스 공급자는 결과 속성을 사용해 LDAP 항목을 만들고 디렉터리를 갱신해요. DirStateFactoryStateFactory를 확장하므로 두 개의 getStateToBind() 메서드를 가져요. 하나는 attributes 인자로 다른 것과 구분돼요. DirectoryManager.getStateToBind()는 attributes 인자를 받는 형태만 사용하고, NamingManager.getStateToBind()는 attributes 인자를 받지 않는 형태만 사용해요. DirStateFactorygetStateToBind() 메서드는 아마도 다른 매개변수를 사용해 여러 번 호출될 수 있어요. 구현은 스레드 안전(thread-safe)해요.

getStateToBind

DirStateFactory.Result getStateToBind(Object obj,
 Name name,
 Context nameCtx,
 Hashtable<?,?> environment,
 Attributes inAttrs)
                               throws NamingException

바인딩할 객체의 상태를 가져와요(변환할 객체와 속성이 주어졌을 때). DirectoryManager.getStateToBind()는 상태 팩토리를 차례로 로드해요. 팩토리가 DirStateFactory를 구현하면 DirectoryManager가 이 메서드를 호출하고, 그렇지 않으면 StateFactory.getStateToBind()를 호출해요. 팩토리가 null이 아닌 답을 만들어낼 때까지 이 작업을 반복해요. 팩토리가 예외를 던지면 그 예외는 DirectoryManager.getStateToBind()의 호출자에게 전달돼요. null이 아닌 답을 만들 수 있는 다른 팩토리를 찾는 작업은 중단돼요. 팩토리는 자신이 유일한 의도된 팩토리이고 다른 팩토리를 시도해서는 안 된다고 확신할 때만 예외를 던져야 해요. 이 팩토리가 제공된 인자로 객체를 만들 수 없으면 null을 반환해야 해요. name과 nameCtx 매개변수는 선택적으로 만들어지는 객체의 이름을 지정하는 데 사용될 수 있어요. 자세한 내용은 ObjectFactory.getObjectInstance()의 "이름과 컨텍스트 매개변수(Name and Context Parameters)" 설명을 참조하세요. 팩토리가 nameCtx를 사용하면 동시 접근에 대해 사용을 동기화해야 해요. 컨텍스트 구현이 스레드 안전하다는 보장이 없기 때문이에요. name, inAttrs, environment 매개변수는 호출자가 소유해요. 구현은 이 객체들을 수정하거나 참조를 유지하지 않아요. 클론이나 복사본에 대한 참조를 유지할 수는 있어요. 이 메서드가 반환하는 객체는 호출자가 소유해요. 구현은 이후에 수정하지 않아요. 그것은 마찬가지로 호출자가 소유하는 새 Attributes 객체 또는 원래 inAttrs 매개변수에 대한 참조를 포함할 거예요.

  • Parameters: obj - 상태를 가져올, null일 수 있는 객체
  • Returns: 바인딩할 객체의 상태와 그에 해당하는 바인딩할 속성을 담은 Result; 객체가 이 팩토리를 사용하지 않으면 null
  • Throws: NamingException - 이 팩토리가 객체의 상태를 얻으려는 동안 예외를 만났고, 시도할 다른 팩토리가 없을 때
  • See Also: DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable, javax.naming.directory.Attributes)