Class NamingManager

Class NamingManager

public class NamingManager
extends Object

이 클래스는 네이밍/디렉터리 서비스의 위치 정보가 가리키는 컨텍스트 객체와 객체를 만드는 메서드를 담고 있어요. 이 클래스는 인스턴스화할 수 없어요. 정적 메서드만 가져요. 이 클래스 문서의 URL 언급은 RFC 1738과 그 관련 RFC에 정의된 URL 문자열을 가리켜요. 거기에 설명된 구문을 따르는 어떤 문자열도 해당하며, java.net.URL 클래스나 웹 브라우저에서 항상 대응하는 지원이 있을 필요는 없어요. NamingManager는 여러 스레드의 동시 접근에 안전해요. 달리 명시되지 않는 한, 어떤 메서드에 전달되는 Name 또는 환경 매개변수는 호출자가 소유해요. 구현은 그 객체를 수정하거나 참조를 유지하지 않지만, 클론이나 복사본에 대한 참조를 유지할 수 있어요.

CPE

public static final String CPE

getContinuationContext()CannotProceedException 매개변수의 값을 저장하는 환경 속성의 이름을 담는 상수예요. 이 속성은 연속 컨텍스트(continuation context)가 상속하며, 그 컨텍스트의 서비스 공급자가 예외의 필드를 검사하는 데 사용할 수 있어요. 이 상수의 값은 "java.naming.spi.CannotProceedException"이에요.

  • Since: 1.3
  • See Also: getContinuationContext(javax.naming.CannotProceedException), 상수 필드 값(Constant Field Values)

setObjectFactoryBuilder

public static void setObjectFactoryBuilder(ObjectFactoryBuilder builder)
                                    throws NamingException

ObjectFactoryBuilder는 객체 팩토리를 로드하려고 할 때 사용되는 정책을 결정해요. 기본 정책에 대한 설명은 getObjectInstance()ObjectFactory 클래스를 참조하세요. setObjectFactoryBuilder()ObjectFactoryBuilder를 설치해 이 기본 정책을 재정의해요. 이후의 객체 팩토리는 설치된 빌더를 사용해 로드·생성될 거예요. 빌더는 실행 중인 스레드가 (보안 관리자의 checkSetFactory() 메서드로) 그렇게 해도 허용될 때만 설치될 수 있어요. 한 번 설치되면 빌더는 교체할 수 없어요.

  • Parameters: builder - 설치할 팩토리 빌더. null이면 빌더가 설치되지 않아요
  • Throws: SecurityException - 보안상의 이유로 builder를 설치할 수 없을 때
  • See Also: getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), ObjectFactory, ObjectFactoryBuilder, SecurityManager.checkSetFactory()

getObjectInstance

public static Object getObjectInstance(Object refInfo,
 Name name,
 Context nameCtx,
 Hashtable<?,?> environment)
                                throws Exception

지정된 객체와 환경에 대한 객체의 인스턴스를 만들어요. 객체 팩토리 빌더가 설치되어 있으면 그것이 객체를 만드는 팩토리를 만드는 데 사용돼요. 그렇지 않으면 다음 규칙이 객체를 만드는 데 사용돼요:

  1. refInfo가 팩토리 클래스 이름을 담은 Reference 또는 Referenceable이면, 그 이름이 붙은 팩토리를 사용해 객체를 만들어요. 팩토리를 만들 수 없으면 refInfo를 반환해요. JDK 1.1에서 팩토리 클래스를 참조에 지정된 위치에서 로드해야 한다면, SecurityManager가 설치되어 있어야 하며 그렇지 않으면 팩토리 생성이 실패할 거예요. 팩토리를 만드는 동안 예외가 발생하면 그것은 호출자에게 전달돼요.
  2. refInfo가 팩토리 클래스 이름이 없는 Reference 또는 Referenceable이고, 그 주소(들)가 주소 타입이 "URL"StringRefAddr들이면, 각 URL의 스킴 ID에 해당하는 URL 컨텍스트 팩토리를 시도해 객체를 만들어요(getURLContext() 참조). 그것이 실패하면 다음 단계로 계속해요.
  3. 환경의 Context.OBJECT_FACTORIES 속성과 nameCtx와 연관된 공급자 리소스 파일에 지정된 객체 팩토리를 그 순서대로 사용해요. 이 속성의 값은 순서대로 시도되는 팩토리 클래스 이름의 콜론으로 구분된 목록이에요. 객체를 만드는 데 성공하는 첫 번째 것이 사용돼요. 팩토리를 하나도 로드할 수 없으면 refInfo를 반환해요. 객체를 만드는 동안 예외가 발생하면 그 예외는 호출자에게 전달돼요.

DirContext 인터페이스를 구현하는 서비스 공급자는 이 메서드가 아니라 DirectoryManager.getObjectInstance()를 사용해야 해요. Context 인터페이스만 구현하는 서비스 공급자는 이 메서드를 사용해야 해요. 객체 팩토리(ObjectFactory 인터페이스를 구현하는 객체)는 public이어야 하고 인자를 받지 않는 public 생성자를 가져야 한다는 점에 주의하세요. 팩토리가 이름이 있는 모듈(named module) 안에 있다면 java.naming 모듈에 그 모듈이 export하는 패키지에 있어야 해요. name과 nameCtx 매개변수는 선택적으로 만들어지는 객체의 이름을 지정하는 데 사용될 수 있어요. 자세한 내용은 ObjectFactory.getObjectInstance()의 "이름과 컨텍스트 매개변수(Name and Context Parameters)" 설명을 참조하세요.

  • Parameters: refInfo - 객체를 만들, null일 수 있는 객체
  • Returns: refInfo로 만든 객체; 위에 설명된 알고리즘으로 객체를 만들 수 없으면 refInfo
  • Throws: NamingException - URL 컨텍스트를 얻으려는 동안 네이밍 예외가 발생했거나, 접근한 팩토리 중 하나가 NamingException을 던졌을 때
  • See Also: getURLContext(java.lang.String, java.util.Hashtable), ObjectFactory, ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable)

getURLContext

public static Context getURLContext(String scheme,
 Hashtable<?,?> environment)
                             throws NamingException

주어진 URL 스킴 ID에 대한 컨텍스트를 만들어요. 결과 컨텍스트는 scheme 스킴의 URL을 해석하기 위한 것이에요. 결과 컨텍스트는 특정 URL에 묶이지 않아요. 지정된 스킴을 가진 임의의 URL을 처리할 수 있어요. 결과 컨텍스트를 만드는 팩토리의 클래스 이름은 스킴 ID URLContextFactory라는 네이밍 규칙(예: "ftp" 스킴 ID에 대해 "ftpURLContextFactory")을 가지며, 다음과 같이 지정된 패키지에 있어요. Context.URL_PKG_PREFIXES 환경 속성(시스템 속성이나 애플리케이션 리소스 파일에서 가져온 값일 수 있음)은 콜론으로 구분된 패키지 접두사 목록을 담고 있어요. 속성의 각 패키지 접두사는 팩토리 클래스를 로드하기 위해 지정된 순서로 시도돼요. 기본 패키지 접두사는 "com.sun.jndi.url"이에요(지정된 패키지 중 아무것도 동작하지 않으면 이 기본값이 시도돼요). 완전한 패키지 이름은 패키지 접두사를 사용하고 스킴 ID를 연결해 구성돼요. 예를 들어 스킴 ID가 "ldap"이고 Context.URL_PKG_PREFIXES 속성이 "com.widget:com.wiz.jndi"를 담고 있으면, 네이밍 매니저는 하나가 성공적으로 인스턴스화될 때까지 다음 클래스를 로드하려고 시도해요:

  • com.widget.ldap.ldapURLContextFactory
  • com.wiz.jndi.ldap.ldapURLContextFactory
  • com.sun.jndi.url.ldap.ldapURLContextFactory

패키지 접두사 중 아무것도 동작하지 않으면 null이 반환돼요. 팩토리가 인스턴스화되면 결과 컨텍스트를 만들기 위해 다음 매개변수로 호출돼요.

factory.getObjectInstance(null, environment);

예를 들어 LDAP URL 컨텍스트 팩토리에서 위와 같이 getObjectInstance()를 호출하면 LDAP URL(예: "ldap://ldap.wiz.com/o=wiz,c=us", "ldap://ldap.umich.edu/o=umich,c=us", ...)을 해석할 수 있는 컨텍스트를 반환할 거예요. 객체 팩토리(ObjectFactory 인터페이스를 구현하는 객체)는 public이어야 하고 인자를 받지 않는 public 생성자를 가져야 한다는 점에 주의하세요. 팩토리가 이름이 있는 모듈 안에 있다면 java.naming 모듈에 그 모듈이 export하는 패키지에 있어야 해요. name과 nameCtx 매개변수는 선택적으로 만들어지는 객체의 이름을 지정하는 데 사용될 수 있어요. 자세한 내용은 ObjectFactory.getObjectInstance()의 "이름과 컨텍스트 매개변수" 설명을 참조하세요.

  • Parameters: scheme - 컨텍스트가 지원하는 URL들의, null이 아닌 스킴 ID
  • Returns: 스킴 ID scheme을 가진 URL을 해석하기 위한 컨텍스트; 컨텍스트를 만드는 팩토리를 찾지 못하면 null
  • Throws: NamingException - 컨텍스트를 만드는 동안 네이밍 예외가 발생했을 때
  • See Also: getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable)

getInitialContext

public static Context getInitialContext(Hashtable<?,?> env)
                                 throws NamingException

지정된 환경 속성을 사용해 초기 컨텍스트를 만들어요. 다음과 같이 수행돼요:

  1. InitialContextFactoryBuilder가 설치되어 있으면 그것이 초기 컨텍스트를 만드는 팩토리를 만드는 데 사용돼요
  2. 그렇지 않으면 Context.INITIAL_CONTEXT_FACTORY 환경 속성에 지정된 클래스가 사용돼요
    • 먼저 ServiceLoader 메커니즘이 현재 스레드의 컨텍스트 클래스 로더를 사용해 InitialContextFactory 공급자를 찾으려고 시도해요
    • 그것이 실패하면 이 구현은 내장 메커니즘으로 적절한 InitialContextFactory를 찾으려고 시도해요

(참고: 초기 컨텍스트 팩토리(InitialContextFactory 인터페이스를 구현하는 객체)는 public이어야 하고 인자를 받지 않는 public 생성자를 가져야 해요. 팩토리가 이름이 있는 모듈 안에 있다면 java.naming 모듈에 그 모듈이 export하는 패키지에 있어야 해요.)

  • Parameters: env - 컨텍스트를 만들 때 사용되는, null일 수 있는 환경 속성들
  • Returns: null이 아닌 초기 컨텍스트
  • Throws: NoInitialContextException - Context.INITIAL_CONTEXT_FACTORY 속성을 찾지 못했거나 존재하지 않는 클래스나 인스턴스화할 수 없는 클래스를 이름 붙이거나, 다른 이유로 초기 컨텍스트를 만들 수 없을 때
  • See Also: InitialContext, InitialDirContext

setInitialContextFactoryBuilder

public static void setInitialContextFactoryBuilder(InitialContextFactoryBuilder builder)
                                            throws NamingException

InitialContextFactory 빌더를 builder로 설정해요. 빌더는 실행 중인 스레드가 보안 관리자에 의해 그렇게 해도 허용될 때만 설치될 수 있어요. 한 번 설치되면 빌더는 교체할 수 없어요.

  • Parameters: builder - 설치할 초기 컨텍스트 팩토리 빌더. null이면 빌더가 설정되지 않아요
  • Throws: SecurityException - 보안상의 이유로 builder를 설치할 수 없을 때
  • See Also: hasInitialContextFactoryBuilder(), SecurityManager.checkSetFactory()

hasInitialContextFactoryBuilder

public static boolean hasInitialContextFactoryBuilder()

초기 컨텍스트 팩토리 빌더가 설정되었는지 결정해요.

  • Returns: 초기 컨텍스트 팩토리 빌더가 설정되었으면 true, 그렇지 않으면 false
  • See Also: setInitialContextFactoryBuilder(javax.naming.spi.InitialContextFactoryBuilder)

getContinuationContext

public static Context getContinuationContext(CannotProceedException cpe)
                                      throws NamingException

컨텍스트 연산을 계속할 컨텍스트를 만들어요. 여러 네임스페이스에 걸친 이름에 대한 연산을 수행할 때, 한 네이밍 시스템의 컨텍스트가 그 연산을 다음 네이밍 시스템에 넘겨야 할 수 있어요. 컨텍스트 구현은 먼저 얼마나 진행했는지 정확히 집는 정보를 담은 CannotProceedException을 구성하고, 그런 다음 getContinuationContext를 호출해 JNDI에서 연속 컨텍스트를 얻어 이 작업을 수행해요. 컨텍스트 구현은 그런 다음 아직 해석되지 않은 이름의 나머지를 사용해 연속 컨텍스트에서 같은 연산을 호출함으로써 컨텍스트 연산을 재개해야 해요. cpe 매개변수를 사용하기 전에 이 메서드는 그 객체와 연관된 환경을 CPE 속성을 cpe로 설정해 갱신해요. 이 속성은 연속 컨텍스트가 상속하며, 그 컨텍스트의 서비스 공급자가 이 예외의 필드를 검사하는 데 사용할 수 있어요.

  • Parameters: cpe - 이 연속(continuation)을 촉발한, null이 아닌 예외
  • Returns: 연산을 계속하기 위한, null이 아닌 Context 객체
  • Throws: NamingException - 네이밍 예외가 발생했을 때

getStateToBind

public static Object getStateToBind(Object obj,
 Name name,
 Context nameCtx,
 Hashtable<?,?> environment)
                             throws NamingException

바인딩할 객체의 상태를 가져와요. DirContext 인터페이스를 구현하는 서비스 공급자는 이 메서드가 아니라 DirectoryManager.getStateToBind()를 사용해야 해요. Context 인터페이스만 구현하는 서비스 공급자는 이 메서드를 사용해야 해요. 이 메서드는 환경 속성들의 Context.STATE_FACTORIES 속성과 nameCtx와 연관된 공급자 리소스 파일에 지정된 상태 팩토리를 그 순서대로 사용해요. 이 속성의 값은 순서대로 시도되는 팩토리 클래스 이름의 콜론으로 구분된 목록이에요. 객체의 상태를 반환하는 데 성공하는 첫 번째 것이 사용돼요. 이런 방식으로 객체의 상태를 가져올 수 없으면 객체 자체를 반환해요. 상태를 가져오는 동안 예외가 발생하면 그 예외는 호출자에게 전달돼요. 상태 팩토리(StateFactory 인터페이스를 구현하는 객체)는 public이어야 하고 인자를 받지 않는 public 생성자를 가져야 한다는 점에 주의하세요. 팩토리가 이름이 있는 모듈 안에 있다면 java.naming 모듈에 그 모듈이 export하는 패키지에 있어야 해요. name과 nameCtx 매개변수는 선택적으로 만들어지는 객체의 이름을 지정하는 데 사용될 수 있어요. 자세한 내용은 ObjectFactory.getObjectInstance()의 "이름과 컨텍스트 매개변수" 설명을 참조하세요. 이 메서드는 Referenceable 객체를 반환할 수 있어요. 이 객체를 얻는 서비스 공급자는 그것을 직접 저장하거나(선택적으로), Referenceable.getReference()로 그것의 참조를 추출해 그것을 대신 저장할 수 있어요.

  • Parameters: obj - 바인딩할 상태를 가져올, null이 아닌 객체
  • Returns: 바인딩을 위한 obj의 상태를 나타내는, null이 아닌 객체. 객체(obj) 자체일 수 있어요
  • Throws: NamingException - 접근한 팩토리 중 하나가 예외를 던졌거나, 팩토리·객체 클래스를 로드하고 인스턴스화하는 동안 오류가 발생했을 때. 팩토리는 객체를 만들려고 다른 팩토리를 사용하고 싶지 않을 때만 예외를 던져야 해요. StateFactory.getStateToBind() 참조
  • Since: 1.3
  • See Also: StateFactory, StateFactory.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable, javax.naming.directory.Attributes)