JNDI 기반 응용 프로그램 개발

JNDI(The Java Naming and Directory Interface,Java 이름과 디 렉 터 리 인터페이스)는 Java 응용 프로그램 에서 이름과 디 렉 터 리 서비스 에 접근 하 는 API 입 니 다.이름 서 비 스 는 이름과 대상 을 연결 하여 이름 으로 대상 에 접근 할 수 있 도록 합 니 다.디 렉 터 리 서 비 스 는 이름 을 가 진 서비스 로 서 대상 은 이름 뿐만 아니 라 속성 도 있다.이름 이나 디 렉 터 리 서 비 스 는 공유 정 보 를 집중 적 으로 저장 할 수 있다 는 점 은 네트워크 응용 에서 중요 하 다.이 는 이러한 응용 을 더욱 조 화 롭 고 쉽게 관리 할 수 있 기 때문이다.예 를 들 어 프린터 설정 을 디 렉 터 리 서비스 에 저장 하여 프린터 와 관련 된 응용 프로그램 에 사용 할 수 있 습 니 다.본 고 는 코드 예시 의 방식 으로 빠 른 강 좌 를 제시 하여 JNDI 를 사용 할 수 있 도록 한다.그것:1.JNDI 개술 2 를 제공 하고 JNDI 의 특징 을 묘사 했다.3.JNDI 로 응용 프로그램 을 개발 하 는 것 을 체험 했다.4.JNDI 를 이용 하여 LDAP 서버 에 접근 하 는 방법 을 보 여 주 었 다.예 를 들 어 Sun ONE 디 렉 터 리 서버 5 는 JNDI 를 이용 하여 J2EE 서비스 6 에 접근 하 는 방법 을 보 여 주 었 고 예시 코드 를 제공 했다.이 를 자신의 애플 리 케 이 션 JNDI 로 개편 할 수 있 습 니 다.예 를 들 어 웹 브 라 우 저 에 URL 을 입력 하면http://java.sun.comDNS(Domain Name System,도 메 인 네 임 시스템)는 이 기호 URL 이름 을 통신 표지(IP 주소)로 변환 합 니 다.명명 시스템 의 대상 은 DNS 기록 의 이름,응용 서버 의 EJB 구성 요소(Enterprise JavaBeans Component),LDAP(Lightweight Directory Access Protocol)의 사용자 Profile 일 수 있 습 니 다.디 렉 터 리 서 비 스 는 이름 을 가 진 서비스의 자 연 스 러 운 확장 입 니 다.이들 의 관건 적 인 차 이 는 디 렉 터 리 서비스 에서 대상 은 속성(예 를 들 어 사용자 에 게 이메일 주소 가 있 음)이 있 을 수 있 고 이름 을 짓 는 서비스 에서 대상 은 속성 이 없다 는 것 이다.따라서 디 렉 터 리 서비스 에 서 는 속성 에 따라 대상 을 검색 할 수 있 습 니 다.JNDI 는 파일 시스템 의 파일 에 접근 하고 원 격 RMI 에 등 록 된 대상 을 찾 으 며 LDAP 와 같은 디 렉 터 리 서비스 에 접근 하고 네트워크 의 EJB 구성 요 소 를 찾 을 수 있 도록 합 니 다.LDAP 클 라 이언 트,launcher,클래스 브 라 우 저,네트워크 관리 유 틸 리 티,심지어 주소록 과 같은 응용 프로그램 에 있어 JNDI 는 좋 은 선택 입 니 다.JNDI 구조 JNDI 구 조 는 명명 시스템 에 독립 된 표준 API 를 제공 합 니 다.이 API 들 은 명명 시스템 과 관련 된 구동 위 에 구 축 됩 니 다.이 층 은 응용 프로그램 을 실제 데이터 원본 과 분리 하 는 데 도움 이 되 기 때문에 응용 프로그램 이 LDAP,RMI,DNS,다른 디 렉 터 리 서비스 에 접근 하 든 상관없다.다시 말 하면 JNDI 는 디 렉 터 리 서비스의 구체 적 인 실현 에 독립 되 어 있 으 며 디 렉 터 리 서비스 가 인터페이스(또는 구동)를 제공 하면 디 렉 터 리 를 사용 할 수 있다.그림 1 참조.그림 1:JNDI 구조 가 JNDI 에 대해 주의해 야 할 중요 한 것 은 응용 프로 그래 밍 인터페이스(application programming interface,API)와 서비스 제공 자 인터페이스(service provider interface,SPI)를 제공 한 다 는 것 이다.이 점 의 진정한 의 미 는 네 임 서비스 나 디 렉 터 리 서비스 와 상호작용 을 하려 면 이 서비스의 JNDI 서비스 제공 자가 있어 야 한 다 는 것 이다.이것 이 바로 JNDI SPI 가 역할 을 발휘 하 는 곳 이다.서비스 제공 자 는 기본적으로 하나의 유형 이다.이런 유형 은 각종 구체 적 인 명명 과 디 렉 터 리 서 비 스 를 위해 JNDI 인 터 페 이 스 를 실현 했다.마치 JDBC 구동 이 각종 구체 적 인 데이터 베이스 시스템 으로 JDBC 인 터 페 이 스 를 실현 한 것 과 같다.응용 개발 자로 서 JNDI SPI 에 신경 쓸 필요 가 없습니다.사용 하고 자 하 는 모든 이름 이나 디 렉 터 리 서비스 에 서비스 제공 자가 있 는 지 확인 해 야 합 니 다.J2SE 와 JNDI 자바 2 SDK 1.3 이상 버 전 에는 JNDI 가 포함 됐다.JDK 1.1 과 1.2 에 도 표준 확장 이 있다.자바 2 SDK 1.4.x 의 최신 버 전 은 몇 가지 강화 와 아래 의 명명/디 렉 터 리 서비스 제공 자 를 포함한다.1.LDAP(Lightweight Directory Access Protocol)서비스 제공 자 2.CORBA COS(Common Object Request Broker Architecture Common Object Services)의 명명 서비스 제공 자 3.RMI(Java Remote Method Invocation)등록 서비스 제공 자 l DNS(Domain Name System)서비스 제공 자 더 많은 서비스 제공 자 는 다음 과 같은 사이트 에서 다운로드 할 수 있 는 서비스 제공 자 목록 을 찾 을 수 있 습 니 다.http://java.sun.com/products/jndi/serviceproviders.html 특히 재 미 있 는 것 은 다음 과 같은 사이트 에서 제공 하 는 윈도 레 지 스 트 JNDI 서비스 제공 자 일 수도 있 습 니 다:http://cogentlogic.com/coon/cogentlogic Corporation/JNDI.xml 이 서비스 제공 자 는 Windows XP/2000/NT/Me/9x 의 windows 레 지 스 트 를 방문 할 수 있 습 니 다.다음 사이트 에서 JNDI/LDAP Booster Pack 을 다운로드 할 수도 있 습 니 다.http://java.sun.com/products/jndi/ 이 Booster Pack 은 유행 하 는 LDAP 제어 에 대한 지원 과 확장 을 포함 하고 있 습 니 다.LDAP 1.2.1 서비스 제공 자 와 묶 인 booster pack 을 대체 했다.제어 와 확장 에 관 한 더 많은 정 보 는 다음 과 같은 사이트 에서 볼 수 있다.http://java.sun.com/products/jndi/tutorial/ldap/ext/index.html 또 다른 재 미 있 는 서비스 제공 자 는 썬 의 DSML v 2.0(Directory Service Markup Language,디 렉 터 리 서비스 태그 언어)을 지원 하 는 서비스 제공 자 이다.DSML 의 목적 은 디 렉 터 리 서비스 와 XML 사이 에 다 리 를 놓 는 것 이다.JNDI API JNDI API 는 5 개의 패키지 로 구성 되 어 있 습 니 다.1.Javax.naming:이름 을 가 진 서비스 에 접근 하 는 클래스 와 인 터 페 이 스 를 포함 합 니 다.예 를 들 어 Context 인 터 페 이 스 를 정 의 했 습 니 다.이것 은 서비스 실행 조회 의 입구 입 니 다.2.Javax.naming.directory:네 임 팩 의 확장 은 디 렉 터 리 서비스 에 접근 하 는 클래스 와 인 터 페 이 스 를 제공 합 니 다.예 를 들 어 속성 에 새로운 클래스 를 추가 하고 디 렉 터 리 컨 텍스트 를 나타 내 는 DirContext 인 터 페 이 스 를 제공 하여 디 렉 터 리 대상 의 속성 을 검사 하고 업데이트 하 는 방법 을 정의 합 니 다.3.Javax.naming.event:이름과 디 렉 터 리 서비스 에 접근 할 때 시간 알림 을 지원 합 니 다.예 를 들 어 NamingEvent 류 를 정 의 했 습 니 다.이 종 류 는 이름/디 렉 터 리 서비스 가 발생 하 는 사건 을 표시 하고 NamingEvents 를 검색 하 는 NamingListener 인 터 페 이 스 를 정의 합 니 다.4.자바 x.naming.ldap:이 가방 은 LDAP 버 전 3 확장 작업 과 제어 에 대한 지원 을 제공 합 니 다.유 니 버 설 패키지 자바 x.naming.directory 는 이러한 조작 과 통 제 를 포함 하지 않 습 니 다.5.자바 x.naming.spi:이 가방 은 자바 x.naming 과 관련 된 가방 의 동 태 를 통 해 방문 이름과 디 렉 터 리 서비스 에 대한 지원 을 추가 하 는 방법 을 제공 합 니 다.이 가방 은 서비스 제공 자 를 만 드 는 데 관심 이 있 는 개발 자 에 게 제공 합 니 다.JNDI 컨 텍스트 는 앞에서 언급 한 바 와 같이 명명 서 비 스 는 이름과 대상 을 연결 합 니 다.이런 관 계 를 바 인 딩(binding)이 라 고 합 니 다.이러한 바 인 딩 을 컨 텍스트(context)라 고 부 르 며 컨 텍스트 는 분석(즉 대상 의 검색 작업 을 되 돌려 주 는 것)을 제공 합 니 다.다른 작업 은 이름 의 바 인 딩 과 바 인 딩 취소,바 인 딩 이름 을 보 여 줍 니 다.하나의 컨 텍스트 대상 의 이름 이 같은 이름 으로 약 정 된 다른 컨 텍스트 대상 에 연결 되 어 있 음 을 알 수 있 습 니 다.이것 은 하위 문맥 이 라 고 부른다.예 를 들 어 UNIX 의 디 렉 터 리/home 이 하나의 컨 텍스트 라면 이 디 렉 터 리 에 비해 하위 디 렉 터 리 는 하위 컨 텍스트 입 니 다.예 를 들 어/home/guests 에서 guests 는 home 의 하위 컨 텍스트 입 니 다.JNDI 에서 상하 문 은 인터페이스 javax.naming.context 로 이 인 터 페 이 스 는 명명 서비스 와 상호작용 하 는 관건 적 인 인터페이스 임 을 나타 낸다.Context(또는 잠시 후 토론 할 DirContext)인터페이스 에 있 는 모든 이름 을 다시 불 러 오 는 방법 은 두 가지 가 있 습 니 다.1.Lookup(String name):문자열 이름 2,Lookup(javax.naming.Name):구조 이름 을 받 아들 입 니 다.예 를 들 어 Composite Name(여러 개의 이름 을 뛰 어 넘 는 이름)이나 CompondName(하나의 이름 시스템 의 이름);그것들 은 모두 Name 인 터 페 이 스 를 실현 했다.Compound name 의 한 예 는 cn=my dir,cn=Q Mahmoud,ou=People,coposite name 의 한 예 는 cn=my dir,cn=Q Mahmoud,ou=People/my files/max.txt(여기 서 my files/max.txt 는 두 번 째 부분 을 나타 내 는 파일 이름)Javax.naming.Initial Context 는 Context 인 터 페 이 스 를 실 현 했 습 니 다.이 종 류 를 서비스 이름 의 입구 로 사용 합 니 다.InitialContext 대상 을 만 들 기 위해 구조 기 는 자바 util.Hashtable 또는 하위 클래스(예 를 들 어 Properties)의 형식 으로 속성 을 설정 합 니 다.다음 예 를 들 어 Hashtable env=new Hashtable();/select a service provider factory env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContext"); // create the initial context Context contxt = new InitialContext(env);   INITIAL_CONTEXT_FACTORY 는 JNDI 서비스 제공 자 중 공장 클래스(factory class)의 이름 을 지정 했다.Factory 는 서 비 스 를 위해 적당 한 Initial Context 대상 을 만 드 는 것 을 책임 집 니 다.위의 코드 세 션 에서 파일 시스템 서비스 제공 자 에 게 공장 류 를 지정 하 였 습 니 다.표 1 은 지원 하 는 서비스 제공 자의 공장 류 를 제시 했다.주의해 야 할 것 은 파일 시스템 서비스 제공 자의 공장 류 는 Sun 회사 에서 단독으로 다운로드 해 야 하 며 J2SE 1.4.x 에는 이러한 종류 가 포함 되 어 있 지 않다 는 것 이다.표 1:상하 문 INITIALCONTEXT_FACTORY 의 값 Name Service Provider Factory File System com.sun.jndi.fscontext.RefFSContextFactory LDAP com.sun.jndi.ldap.LdapCtxFactory RMI com.sun.jndi.rmi.registry.Registry ContextFactory CORBA com.sun.jndi.cosnaming.CNctx Factory DNS com.sun.jndi.dns.dns.dnsContextFactory 이름 으로 명명 서비스 나 디 렉 터 리 에서 대상 을 얻 거나 분석 하기 위해Context 의 lookup 방법 을 사용 합 니 다:Object obj=context.lookup(name).Lookup 방법 은 대상 을 되 돌려 줍 니 다.이 대상 은 당신 이 찾 고 싶 은 문맥 의 아들 을 표시 합 니 다.

좋은 웹페이지 즐겨찾기