2013-02-22 4 views
4

나는 초보자이며 Java Swing 응용 프로그램을 몇 가지 만들었습니다. DBCP를 사용하여 연결 풀을 만들고 데이터 소스에 액세스 할 수있었습니다.자바 - DBCP 대 JNDI?

저는 최근 JSP와 서블릿을 사용하여 자바 웹 기반 applciations을 작성하기 시작했습니다. JNDI를 사용하여 데이터 소스에 액세스하는 방법을 배웠습니다. 나는 XML 파일을 업데이트하고 InitialContext()와 lookup ("java : comp/env")을 사용한다. 내 Servlet/JSP 컨테이너로 Apache Tomcat을 사용하고 있습니다.

1. DB 연결 풀은 어디에 생성됩니까?

2. 그렇다면 JNDI는 어떻게 든 내부적으로 DBCP를 사용합니까?

스윙 응용 프로그램 용 DBCP를 만들려면 먼저 GenericObjectPool의 인스턴스를 만든 다음 연결 팩토리 개체를 만들고 마지막으로 PoolableConnectionFactory 개체를 만들어 데이터 소스를 만들어 연결을 가져야합니다.

답변

4

JNDI는 시스템의 한 부분에서 다른 부분으로 객체를 전달하는 메커니즘입니다 (기술적 인 측면에서 클래스 로더 전반에서). 이것은 String 또는 DataSource와 같은 Java Runtime에있는 클래스 및 인터페이스에 가장 유용합니다.

즉, JNDI는 전송 메커니즘 일 뿐이며 실제 연결 풀을 다른 곳에서 정의해야합니다. 대부분의 웹 컨테이너에는 시스템 전체 연결 풀을 정의하는 메커니즘이 있으므로 JNDI를 사용하면 액세스 할 수 있습니다.

+0

@ Thorbjørn .... Swing 응용 프로그램과 동일한 웹 응용 프로그램 용 DBCP를 정의합니까? – user547453

+0

@ Thorbjørn .... "... else defined where ..."는 ... Java 클래스 파일 또는 XML 파일임을 의미 할 수 있습니까? – user547453

+1

Tomcat에서 연결 풀을 정의하는 방법은 Tomcat XML 구성 파일에'

3

톰캣은 JNDI Datasource에 대해 Apache DBCPApache Pool의 맞춤 구현을 사용합니다. 이 라이브러리는 단일 JAR ($CATALINA_HOME/lib/tomcat-dbcp.jar)에 있습니다.

정규 패키지 양식 Apache Commons과의 충돌을 피하기 위해 기본 패키지는 org.apache.tomcat.dbcp입니다.

+0

@ Paul ....하지만 연결 풀을 정의해야합니까? Apache Tomcat이 자동으로 생성하지 않습니까? – user547453

3

JNDI는 조회를 통해 원격 자원을 찾는 메커니즘입니다. 연결 풀링 라이브러리와는 공통점이 없습니다. c3p0, DBCP 및 BoneCP가 가장 유명한이 라이브러리를 사용하면 연결 및/또는 문을 풀링 할 수있는 능력을 갖춘 데이터 소스를 만들 수 있습니다. 이 데이터 소스가 내에서 사용되는 경우 원격 시스템 (예 : Tomcat)에있는 경우 JNDI를 사용할 필요가 없으므로 JNDI를 사용하여 데이터에 액세스해야합니다 출처.

보조 메모로, 왜 당신은 구식 서블릿/JSP 콤보로 작업하기로 선택 했습니까? JSF 2.x에서 선호하는 뷰 기술인 JSP 후속 작업 인 facelets로 작업하는 것이 더 좋습니다.

또 다른 의견은 데이터 소스의 관리를 잘 알려진 프레임 워크로 이전하는 것입니다. 하나의 방향은 Hibernate와 같은 ORM을 사용하여 연결 풀링을 염두에두고 생성 된 데이터 소스를 관리하는 것입니다.