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
지정된 객체와 환경에 대한 객체의 인스턴스를 만들어요. 객체 팩토리 빌더가 설치되어 있으면 그것이 객체를 만드는 팩토리를 만드는 데 사용돼요. 그렇지 않으면 다음 규칙이 객체를 만드는 데 사용돼요:
- refInfo가 팩토리 클래스 이름을 담은
Reference또는Referenceable이면, 그 이름이 붙은 팩토리를 사용해 객체를 만들어요. 팩토리를 만들 수 없으면 refInfo를 반환해요. JDK 1.1에서 팩토리 클래스를 참조에 지정된 위치에서 로드해야 한다면,SecurityManager가 설치되어 있어야 하며 그렇지 않으면 팩토리 생성이 실패할 거예요. 팩토리를 만드는 동안 예외가 발생하면 그것은 호출자에게 전달돼요. - refInfo가 팩토리 클래스 이름이 없는
Reference또는Referenceable이고, 그 주소(들)가 주소 타입이"URL"인StringRefAddr들이면, 각 URL의 스킴 ID에 해당하는 URL 컨텍스트 팩토리를 시도해 객체를 만들어요(getURLContext()참조). 그것이 실패하면 다음 단계로 계속해요. - 환경의
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.ldapURLContextFactorycom.wiz.jndi.ldap.ldapURLContextFactorycom.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
지정된 환경 속성을 사용해 초기 컨텍스트를 만들어요. 다음과 같이 수행돼요:
InitialContextFactoryBuilder가 설치되어 있으면 그것이 초기 컨텍스트를 만드는 팩토리를 만드는 데 사용돼요- 그렇지 않으면
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)