일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 엔터프라이즈 블록체인
- 스칼라 강좌
- Golang
- 파이썬 데이터분석
- 이더리움
- play2 강좌
- Hyperledger fabric gossip protocol
- Akka
- 파이썬
- Play2
- Play2 로 웹 개발
- hyperledger fabric
- CORDA
- 하이브리드앱
- 파이썬 머신러닝
- 하이퍼레저 패브릭
- akka 강좌
- Adapter 패턴
- 스칼라
- 안드로이드 웹뷰
- 주키퍼
- 파이썬 동시성
- 스위프트
- 블록체인
- 그라파나
- play 강좌
- 파이썬 강좌
- Actor
- 스칼라 동시성
- 플레이프레임워크
- Today
- Total
HAMA 블로그
초보자를 위한 JNDI 본문
JNDI 는 자바 네이밍 / 디렉토리 인터페이스인데 J2EE 의 가장 중요한 스펙중하나이다.
많은 전문가들은 JNDI 의 역할과 중요성을 이해하지 못하고서는 진정한 J2EE EJB 를 알고있다고 말할수없다고 한다.
과연 JNDI 의 역할은 멀까?
JNDI 의 역할을 이해하기위해 "JNDI 가 없다면 어떻게 해야하는지" 를 먼저 보고 JNDI 를 사용하는것에 대해 살펴보자.
마지막으로 JNDI 의 실행모습과 환경설정등에 대해 알아보자.
* 구체적인 사용방법은 다른 블로그를 참고하도록하자.
1. JNDI 왜 사용하나?
JNDI 의 역할을 이해하기위해 "JNDI 가 없다면 어떻게 해야하는지" 를 먼저 보고 JNDI 를 사용하는것에 대해 살펴보자.
JNDI 없이
MySQL 데이타베이스에 접근하기위한 어플리케이션을 개발할때, MySQL JDBC 드라이버 클래스를 참조하기위해
해당되는 JDBC URL 를 사용하는데 대략 다음과 같다.
Java code
Connection conn = null;
try {
Class.forName ("com.mysql.jdbc.Driver" , true, Thread.currentThread (). getContextClassLoader ());
conn = DriverManager.getConnection ("jdbc: mysql :/ / MyDBServer? user = qingfeng & password = mingyue");
......
conn.close ();
}
.....
이것은 전통적인 접근방법이며 , 다른 언어개발자들에게도 일반적인 방법이다. 이 접근법은 일반적으로 작은규모의 개발
프로세스에 적합하며 자바언어에 익숙하기만하면 어플리케이션을 금방 만들수있는 장점이 있다.
JNDI 식 접근
1. 데이타베이스 서버이름 MYDBSERVER/사용자이름,비밀번호/ 바꿀필요가 있을때라든지 JDBC URL 을 수정할필요가 있을때
2. 데이타베이스가 다른것(DB2, Oracle등) 으로 바뀔수있을때
3. JDBC 설정이 바뀔필요가 있을때 (커넥션 풀 파라미터등등)
해결책 :
프로그래머는 데이타베이스 백그라운드에서의 특별한 세팅에 대해 신경쓰게 하고 싶지 않다. 데이타베이스 관리자가
진두지휘하고 프로그래머는 그냥 가져다 쓰게하고싶다.
그럴때 JNDI 가 있다.
우선 J2EE 컨테이너에 JNDI 파라미터를 설정하고, 데이타소스등을 정의한다. JBoss 에서의 예를 보자
<? Xml version = "1.0" encoding = "UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name> MySqlDS </ jndi-name>
<connection-url> jdbc: mysql :/ / localhost: 3306/lw </ connection-url>
<driver-class> com.mysql.jdbc.Driver </ driver-class>
<user-name> root </ user-name>
<password> rootpassword </ password>
<exception-sorter-class-name> org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </ exception-sorter-class-name>
<metadata>
<type-mapping> mySQL </ type-mapping>
</ Metadata>
</ Local-tx-datasource>
</ Datasources>
2 . 소스에서 사용하기
Java code
Connection conn = null;
try {
Context ctx = new InitialContext ();
Object datasourceRef = ctx.lookup ("java: MySqlDS"); / / reference data source
DataSource ds = (Datasource) datasourceRef;
conn = ds.getConnection ();
......
c.close ();
}
.....
시스템에 대해 배포후에 , 만약 데이타베이스 관련된 파라미터가 바뀔때 오직 mysql-ds.xml 설정만 바꿔주면 된다.
소스코드를 바꿀필요없이 아마 그것만 하는 관리(개발)자를 두면 그사람이 알아서 회사(제품)방침에 따라서 조작 할것이다.
JNDI 는 프로그램과 데이타베이스간에 타이트하게 묶여있는 커플링을 피하게 해주며, 쉽게 설정,배포하게해준다.
3. 관련 이미지
위의 예는 DB 에 접근하기위한 방법에 대한 예이지만, 모든 리소스들에 대해서도 투명화하기위하면 사용할만하겠다.
예를 들어서 밴더별 컴포넌트, 디바이스 드라이버, 환경설정등등..
근데 요즘 OSGi 도 살펴보는중인데 OSGi 는 JNDI 의 특성(위치투명성)과 기존 컴포넌트베이스개발방법론이 합쳐진거
같은 느낌을 받았다.
2. JNDI 모습들과 환경설정에 관하여
환경 설정에 관한 이야기들
웹로직/톰캣 서버가 부팅시에 JNDI 객체를 등록합니다.
JNDI 서버의 실제 구현 기능은 각 Application Server의 Vendor (톰캣, 웹로직같은) 가 제공함
JNDI 서버 단독실행 가능함 : http://meri-stuff.blogspot.kr/2012/01/running-jndi-and-jpa-without-j2ee.html
간단한 JNDI 서버 : https://code.google.com/p/osjava/wiki/SimpleJNDI
레퍼런스:
http://www.databaseskill.com/216815/
'오픈소스, 미들웨어' 카테고리의 다른 글
MQTT 와 모스키토(Mosquitto) 란 무엇인가? (0) | 2015.09.03 |
---|---|
[OpenTSDB] 어떻게 OpenTSDB 는 동작하나? (0) | 2015.07.19 |
OSGi 는 어떻게 내 삶을 변화시켰나 (번역) (0) | 2015.07.17 |
쓰리프트 (Apache Thrift) 의 모든것 (1) - (번역) (0) | 2015.07.08 |
큐 시스템을 이용한 NPUSH-GW 개선 및 Luxun (펌) (0) | 2015.07.08 |