JNDI를 사용하는 애플리케이션 개발
EJB(엔터프라이즈 Bean) 홈 및 데이터 소스와 같은 기타 아티팩트에 대한 참조는 WebSphere® Application Server 네임스페이스에 바인드됩니다. 이러한 오브젝트는 JNDI(Java™ Naming and Directory Interface)를 통해 확보할 수 있습니다. JNDI 작업을 수행하려면 초기 컨텍스트를 가져와야 합니다. 초기 컨텍스트를 사용하여 네임스페이스에 바인드된 오브젝트를 찾아볼 수 있습니다.
이 태스크 정보
이 예에서는 WebSphere Application Server JNDI 컨텍스트 구현에 고유한 기능의 기본 작동이 사용됩니다.
WebSphere Application Server JNDI 컨텍스트 구현에는 특수 기능이 포함되어 있습니다. JNDI 캐싱은 동일한 오브젝트에 대한 반복적인 찾아보기 작업의 성능을 향상시킵니다. 이름 구문 옵션은 이름 구문 선택, 일반 JNDI 클라이언트에 대해 최적화된 기능 및 CosNaming 애플리케이션과의 상호 운용성에 최적화된 기능을 제공합니다. 대부분의 경우 이러한 기능의 기본 작동이 선호 작동입니다. 그러나 종종 특정 상황에서는 작동을 수정해야 합니다.
JNDI 캐싱 및 이름 구문 옵션은 javax.naming.InitialContext 인스턴스와 연관됩니다. 이러한 기능에 옵션을 선택하려면 WebSphere Application Server의 초기 컨텍스트 팩토리에서 인식하는 특성을 설정하십시오. 초기 컨텍스트 팩토리에 표시할 JNDI 캐싱 또는 이름 구문을 설정하려면 다음을 수행하십시오.
프로시저
- 옵션: JNDI 캐시 구성
JNDI 캐싱은 JNDI 찾아보기 조작의 성능을 크게 향상시킬 수 있습니다. 기본적으로 JNDI 캐싱이 사용 가능합니다. 대부분의 상황에서 이 기본값은 바람직한 작동을 가져옵니다. 그러나 특정 상황에서는 다른 JNDI 캐시 옵션을 사용하십시오.
오브젝트를 검색할 때 로컬에 캐시됩니다. 캐시된 오브젝트의 후속 찾아보기가 로컬로 분석됩니다. 그러나 캐시 내용이 손상될 수 있습니다. 찾는 대부분의 오브젝트가 자주 변경되지 않으므로, 대개 이런 상황은 문제가 되지 않습니다. 상대적으로 자주 변경되는 오브젝트를 찾아야 할 경우 JNDI 캐시 옵션을 변경하십시오.
JNDI 클라이언트는 여러 특성을 사용하여 캐시 동작을 제어할 수 있습니다.
특성을 다음과 같이 설정할 수 있습니다.- 실제 문자열 값을 입력하여 명령행에서 설정합니다. 예를 들어 다음과 같습니다.
java -Dcom.ibm.websphere.naming.jndicache.maxentrylife=1440
- 원하는 특성 설정 값이 있는 텍스트 파일로서 jndi.properties
이름의 파일을 작성하여 jndi.properties 파일에서 설정합니다. 예를 들어, 다음과 같습니다.
... com.ibm.websphere.naming.jndicache.cacheobject=none ...
이 기술을 사용하는 경우 jndi.properties 파일의 다른 인스턴스가 클래스 경로에 있을 수 있고 충돌하는 특성 설정이 포함될 수 있음에 유의해야 합니다. 클래스 로더가 jndi.properties 파일을 선택하는 순서에 따라 특성 설정이 결정됩니다. 클래스 경로에서 파일을 찾기 위해 클래스 로더에서 사용하는 순서를 제어하는 방법이 없습니다. WebSphere Application Server는 처음에 com.ibm.websphere.naming.jndicache.cacheobject 특성을 설정하는 jndi.properties 파일을 포함하거나 작성하지 않습니다.
- com.ibm.websphere.naming.PROPS 파일에 정의된
PROPS.JNDI_CACHE* Java 상수를 사용하여 Java 프로그램 내에서 설정합니다.
상수 정의는
다음과 같습니다.
public static final String JNDI_CACHE_OBJECT = "com.ibm.websphere.naming.jndicache.cacheobject"; public static final String JNDI_CACHE_OBJECT_NONE = "none"; public static final String JNDI_CACHE_OBJECT_POPULATED = "populated"; public static final String JNDI_CACHE_OBJECT_CLEARED = "cleared"; public static final String JNDI_CACHE_OBJECT_DEFAULT = JNDI_CACHE_OBJECT_POPULATED; public static final String JNDI_CACHE_NAME = "com.ibm.websphere.naming.jndicache.cachename"; public static final String JNDI_CACHE_NAME_DEFAULT = "providerURL"; public static final String JNDI_CACHE_MAX_LIFE = "com.ibm.websphere.naming.jndicache.maxcachelife"; public static final int JNDI_CACHE_MAX_LIFE_DEFAULT = 0; public static final String JNDI_CACHE_MAX_ENTRY_LIFE = "com.ibm.websphere.naming.jndicache.maxentrylife"; public static final int JNDI_CACHE_MAX_ENTRY_LIFE_DEFAULT = 0;
Java 프로그램의 이전 특성을 사용하려면 특성 설정을 해시 테이블에 추가하고 다음과 같이 InitialContext 생성자로 전달하십시오.
java.util.Hashtable env = new java.util.Hashtable(); ... // Disable caching env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_NONE); ... javax.naming.Context initialContext = new javax.naming.InitialContext(env);
다음은 원하는 대로 캐시를 작동시키기 위해 JNDI 캐시 특성을 어떻게 사용할 수 있는지를 보여주는 예입니다. 캐시 특성은 InitialContext 오브젝트가 구성될 때 적용됩니다.
예: 프로그램에서 JNDI 캐시 동작 제어
import java.util.Hashtable; import javax.naming.InitialContext; import javax.naming.Context; import com.ibm.websphere.naming.PROPS; /***** Caching discussed in this section pertains to the WebSphere Application Server initial context factory. Assume the property, java.naming.factory.initial, is set to "com.ibm.websphere.naming.WsnInitialContextFactory" as a java.lang.System property. *****/ Hashtable env; Context ctx; // To clear a cache: env = new Hashtable(); env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_CLEARED); ctx = new InitialContext(env); // To set a cache's maximum cache lifetime to 60 minutes: env = new Hashtable(); env.put(PROPS.JNDI_CACHE_MAX_LIFE, "60"); ctx = new InitialContext(env); // To turn caching off: env = new Hashtable(); env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_NONE); ctx = new InitialContext(env); // To use caching and no caching: env = new Hashtable(); env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_POPULATED); ctx = new InitialContext(env); env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_NONE); Context noCacheCtx = new InitialContext(env); Object o; // Use caching to look up home, since the home should rarely change. o = ctx.lookup("com/mycom/MyEJBHome"); // Narrow, etc. ... // Do not use cache if data is volatile. o = noCacheCtx.lookup("com/mycom/VolatileObject"); // ...
예: JNDI로 JavaMail 세션 찾아보기
다음 예제는 JavaMail의 자원 찾아보기를 보여 줍니다.
// Get the initial context as shown previously ... Session session = (Session) initialContext.lookup("java:comp/env/mail/MailSession");
- 실제 문자열 값을 입력하여 명령행에서 설정합니다. 예를 들어 다음과 같습니다.
- 옵션: 이름 구문을 지정하십시오.
INS 구문은 CORBA 애플리케이션과 상호운영하는 데 필요한 JNDI 클라이언트용으로 설계되었습니다. 이 구문을 사용하여 JNDI 클라이언트는 CORBA 이름과 적절한 맵핑을 작성할 수 있습니다. INS 구문은 추가 특수 문자로 점(.)이 있는 JNDI 구문과 매우 유사합니다. 점은 이름 컴포넌트에서 ID 필드와 종류 필드를 구분하는 데 사용됩니다. 점은 이스케이프될 때 문자로 해석됩니다. 이름 컴포넌트에는 이스케이프가 아닌 점 하나만 허용됩니다. 비어 있지 않은 ID 필드와 빈 종류 필드로 된 이름 컴포넌트는 ID 필드 값으로만 표시되고, 이스케이프가 아닌 점으로 끝나지 않아야 합니다. 빈 이름 컴포넌트(빈 ID 및 빈 종류 필드)는 이스케이프가 아닌 단일 점으로 표시됩니다. 빈 문자열은 올바른 이름 컴포넌트 표시가 아닙니다.
JNDI 이름 구문은 기본 구문이며 일반 JNDI 클라이언트에 적합합니다. 이 구문은 특수 문자로 슬래시(/) 및 백슬래시(\)를 포함합니다. 이름에서 컴포넌트는 슬래시로 구분됩니다. 백슬래시는 이스케이프 문자로 사용됩니다. 슬래시는 이스케이프된 경우 문자로 해석됩니다. 즉, 백슬래시 앞에 옵니다. 마찬가지로, 백슬래시도 이스케이프된 경우 문자로 해석됩니다.
대부분의 WebSphere 애플리케이션은 JNDI를 사용하여 EJB 오브젝트를 찾기 때문에, CORBA 애플리케이션을 통해 바인드된 오브젝트를 찾을 필요가 없습니다. 그러므로, JNDI 이름에 사용되는 기본 이름 구문이 가장 편리합니다. 애플리케이션이 CORBA 애플리케이션에 의해 바인드된 오브젝트를 찾아야 하는 경우, 모든 CORBA CosNaming 이름이 표현될 수 있도록 이름 구문을 변경해야 합니다.
JNDI 클라이언트는 특성을 설정하여 이름 구문을 설정할 수 있습니다. 새 java.naming.InitialContext 오브젝트 인스턴스화 시 초기 컨텍스트 팩토리에 따라 특성 설정을 적용합니다. 초기 컨텍스트에 대한 JNDI 조작에 지정된 이름은 지정된 이름 구문에 따라 구문 분석됩니다.
특성을 다음과 같이 설정할 수 있습니다.
- 명령행에서 실제 문자열 값을 입력하십시오. 예를 들어, 다음과 같습니다.
java -Dcom.ibm.websphere.naming.name.syntax=ins
- 원하는 특성 설정 값이 있는 텍스트 파일로서 jndi.properties 이름의 파일을 작성하십시오.
예를 들어, 다음과 같습니다.
... com.ibm.websphere.naming.name.syntax=ins ...
이 기술을 사용하는 경우 jndi.properties 파일의 다른 인스턴스가 클래스 경로에 있을 수 있고 충돌하는 특성 설정이 포함될 수 있음에 유의해야 합니다. 클래스 로더가 jndi.properties 파일을 선택하는 순서에 따라 특성 설정이 결정됩니다. 클래스 경로에서 파일을 찾기 위해 클래스 로더에서 사용하는 순서를 제어하는 방법이 없습니다. WebSphere Application Server는 처음에 com.ibm.websphere.naming.name.syntax 특성을 설정하는 jndi.properties 파일을 포함하거나 작성하지 않습니다.
- PROPS.NAME_SYNTAX* Java 상수를 사용하여 Java 프로그램에서 com.ibm.websphere.naming.PROPS 파일에 정의됩니다.
상수 정의는
다음과 같습니다.
public static final String NAME_SYNTAX = "com.ibm.websphere.naming.name.syntax"; public static final String NAME_SYNTAX_JNDI = "jndi"; public static final String NAME_SYNTAX_INS = "ins";
Java 프로그램의 이전 특성을 사용하려면 특성 설정을 해시 테이블에 추가하고 다음과 같이 InitialContext 생성자로 전달하십시오.
java.util.Hashtable env = new java.util.Hashtable(); ... env.put(PROPS.NAME_SYNTAX, PROPS.NAME_SYNTAX_INS); // Set name syntax to INS ... javax.naming.Context initialContext = new javax.naming.InitialContext(env);
예: 이름 문자열 구문 분석에 사용되는 구문 설정
이름 구문 특성은 시스템 특성 또는 jndi.properties 파일에서 해당 매개변수를 통해 InitialContext 생성자로 전달될 수 있습니다. 초기 컨텍스트 및 초기 컨텍스트에서 찾아보는 모든 컨텍스트는 지정된 구문에 기반하여 이름 문자열을 구문 분석합니다.
다음 예제는 INS 구문에 따라 이름 구문을 초기 컨텍스트 구문 분석 이름 문자열로 설정하는 방법을 보여 줍니다.
... import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import com.ibm.websphere.naming.PROPS; // WebSphere naming constants ... Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); env.put(Context.PROVIDER_URL, ...); env.put(PROPS.NAME_SYNTAX, PROPS.NAME_SYNTAX_INS); Context initialContext = new InitialContext(env); // The following name maps to a CORBA name component as follows: // id = "a.name", kind = "in.INS.format" // The unescaped dot is used as the delimiter. // Escaped dots are interpreted literally. java.lang.Object o = initialContext.lookup("a\\.name.in\\.INS\\.format"); ...
INS 이름 구문에서는 in.INS.format와 같은 이름에서 임베디드 마침표(.)를 이스케이프할 때 백슬래시 문자(\)를 사용해야 합니다. Java 문자열 리터럴에서는 백슬래시 문자(\)를 이스케이프할 때 백슬래시 문자를 하나 더 사용(\\)해야 합니다.
- 명령행에서 실제 문자열 값을 입력하십시오. 예를 들어, 다음과 같습니다.
- 옵션: 호스트 이름 표준화를 사용 안함으로 설정
제공자 URL의 호스트 이름, I/P 주소 및 localhost에 대한 참조는 일반적으로 표준화됩니다. 표준화된 호스트 이름 형식은 호스트 이름의 완전한 형식입니다. 호스트 이름 표준화는 제공자 URL의 참조 형식과 상관없이 지정된 부트스트랩 호스트에 대해 동일한 JNDI 캐시를 사용할 수 있게 하여 시스템 효율성을 향상시킵니다. 예를 들어 호스트 이름 표준화를 사용하면 myhost, myhost.mydomain.com 및 localhost 참조가 모두 동일한 호스트를 참조하는 경우 이러한 모든 참조에 대해 동일한 JNDI 캐시를 사용할 수 있습니다.
표준화된 호스트 이름은 캐시되므로 후속 표준화가 보다 빠르게 실행됩니다. 일부 네트워크 환경에서는 도메인 이름 검색 데이터가 동적으로 변경되어 캐시된 호스트 이름 표준화 데이터가 무효하게 되는 원인이 됩니다. 이러한 환경에서는 호스트 이름 표준화를 사용 안함으로 설정해야 할 수도 있습니다. 호스트 표준화를 사용 안함으로 설정하는 경우 호스트 이름 및 I/P 주소가 원래대로 사용됩니다. localhost에 대한 참조는 일반적으로 루프백 주소, 127.0.0.1에 대해 해석됩니다.
JNDI 클라이언트는 특성을 설정하여 호스트 이름 표준화를 사용 안함으로 설정할 수 있습니다. 새 java.naming.InitialContext 오브젝트 인스턴스화 시 초기 컨텍스트 팩토리에 따라 특성 설정을 적용합니다.
다음 기법 중 하나를 사용하여 이 특성을 설정하십시오.- 명령행에서 실제 문자열 값을 입력할 수 있습니다. 예를 들어, 다음과 같습니다.
java -Dcom.ibm.websphere.naming.hostname.normalizer=...none...
- 원하는 특성 설정값이 있는 텍스트 파일로서 jndi.properties
이름의 파일을 작성할 수 있습니다. 예를 들어, 다음과 같습니다.
... com.ibm.websphere.naming.hostname.normalizer=...none... ...
이 기술을 사용하는 경우 jndi.properties 파일의 다른 인스턴스가 클래스 경로에 있을 수 있고 충돌하는 특성 설정이 포함될 수 있음에 유의해야 합니다. 클래스 로더가 jndi.properties 파일을 선택하는 순서에 따라 특성 설정이 결정됩니다. 클래스 경로에서 파일을 찾기 위해 클래스 로더에서 사용하는 순서를 제어하는 방법이 없습니다. WebSphere Application Server는 처음에 com.ibm.websphere.naming.hostname.normalizer 특성을 설정하는 jndi.properties 파일을 포함하거나 작성하지 않습니다.
- Java 프로그램에서 PROPS.HOSTNAME_NORMALIZER* Java 상수를 사용할 수 있습니다. 이러한 Java 상수는 com.ibm.websphere.naming.PROPS 파일에서
정의됩니다. 다음은 이 기술을 사용할 것인지 여부를 지정하는 상수 정의입니다.
public static final String HOSTNAME_NORMALIZER = "com.ibm.websphere.naming.hostname.normalizer"; public static final String HOSTNAME_NORMALIZER_NONE = "...none...;
Java 프로그램의 이러한 정의를 사용하려면 특성 설정을 해시 테이블에 추가하고 InitialContext 생성자로 전달하십시오.
java.util.Hashtable env = new java.util.Hashtable(); ... env.put(PROPS.HOSTNAME_NORMALIZER, PROPS.HOSTNAME_NORMALIZER_NONE); // Disable hostname normalization ... javax.naming.Context initialContext = new javax.naming.InitialContext(env);
예: 호스트 이름 표준화 사용 안함
시스템 특성 파일 또는 jndi.properties 파일에서 InitialContext 생성자 매개변수를 통해 InitialContext 생성자에 호스트 이름 표준화 프로그램 특성을 전달할 수 있습니다. 초기 컨텍스트 및 해당 초기 컨텍스트에서 찾아보는 이후 컨텍스트는 이 특성 설정을 사용합니다.
다음 예는 호스트 이름 표준화를 사용 불가능하게 하는 방법을 보여 줍니다.
... import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import com.ibm.websphere.naming.PROPS; // WebSphere naming constants ... Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); env.put(Context.PROVIDER_URL, ...); env.put(PROPS.HOSTNAME_NORMALIZER, PROPS.HOSTNAME_NORMALIZER_NONE); Context initialContext = new InitialContext(env); java.lang.Object o = initialContext.lookup(...); ...
- 명령행에서 실제 문자열 값을 입력할 수 있습니다. 예를 들어, 다음과 같습니다.
하위 주제
예: 기본 초기 컨텍스트 가져오기
프로그램이 기본 초기 컨텍스트를 가져오는 여러 방법이 있습니다.예제: 제공자 URL 특성을 설정하여 초기 컨텍스트 가져오기
일반적으로 JNDI(Java Naming and Directory Interface) 클라이언트는 올바른 환경이 이미 구성되어 특성 값을 명시적으로 설정하고 해당 값을 InitialContext 생성자에 전달하지 않아도 되는 것으로 가정합니다. 그러나 JNDI 클라이언트는 해당 환경에서 식별된 네임스페이스와 다른 네임스페이스에 액세스해야 할 수 있습니다. 이 경우 InitialContext 생성자에서 사용되는 java.naming.provider.url(제공자 URL) 특성을 명시적으로 설정해야 합니다. 제공자 URL은 초기 컨텍스트 팩토리가 초기 컨텍스트를 얻는 데 사용할 수 있는 부트스트랩 서버 정보를 포함합니다. InitialContext 생성자에 직접 전달되는 특성 값은 환경의 다른 위치에서 발견된 같은 특성의 설정에 우선합니다.예: 다른 루트 컨텍스트를 초기 컨텍스트로 선택하도록 제공자 URL 특성 설정
각 서버는 자체 서버 루트 컨텍스트를 포함하며, 서버에 부트스트래핑하면 서버 루트는 기본 초기 JNDI 컨텍스트입니다. 대부분 EJB 홈과 같은 시스템 아티팩트가 거기에 바인드되므로 이 기본값은 원하는 초기 컨텍스트입니다. 그러나 기타 루트 컨텍스트가 존재하며, 원하는 바인딩을 포함할 수 있습니다. 기타 루트 컨텍스트를 선택하도록 제공자 URL을 지정할 수 있습니다.예: JNDI로 EJB 홈 또는 비즈니스 인터페이스 검색
JNDI(Java Naming and Directory Interface)를 사용하는 대부분의 애플리케이션은 컨테이너에서 사용합니다. 일부는 그렇지 않습니다. 애플리케이션이 컨테이너에서 실행되는지 여부에 따라 오브젝트 검색에 사용하는 이름이 다릅니다. 애플리케이션이 검색 이름으로 corbaname URL을 사용하는 것이 보다 편리할 경우가 있습니다. 컨테이너 기반 JNDI 클라이언트 및 thin Java 클라이언트는 corbaname URL을 사용할 수 있습니다.JNDI 상호 운용성 고려사항
추가 단계를 사용하여 사용자 프로그램이 비-제품 JNDI 클라이언트와 상호운용하고 MQSeries®에서 네임스페이스로 바인드되게 해야 합니다.JNDI 캐싱
JNDI(Java Naming and Directory Interface) 조작 성능을 향상시키기 위해 제품 JNDI 구현은 캐싱을 사용하여 검색 조작을 위한 이름 서버에 대한 원격 호출 수를 줄입니다. 대부분의 경우, 기본 캐시 설정을 사용하십시오.JNDI 캐시 설정
다양한 JNDI(Java Naming and Directory Interface) 캐시 특성 설정이 뒤따릅니다. 모든 특성 값이 문자열 값인지 확인하십시오.JNDI 대 CORBA 이름 맵핑 고려사항
WebSphere Application Server 이름 서버는 CORBA CosNaming 인터페이스의 구현입니다. 제품은 JNDI 인터페이스를 통해 CosNaming 이름 서버에 액세스하기 위해 사용할 수 있는 JNDI(Java Naming and Directory Interface) 구현을 제공합니다. JNDI 이름 문자열을 CORBA 이름과 맵핑할 때 문제가 있을 수 있습니다.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tnam_develop_naming
파일 이름:tnam_develop_naming.html