Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

MySQL+Apache Tomcat 6.0 JNDI Datasource How to

Language/Java 2012.12.12 18:44
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
데이터소스를 설정 해주는 것은 많이 있다.

그 중에 톰캣을 가지고 데이터소스 연동하는 것을 해보겠다.
Apache Tomcat 6.0

데이터베이스는 MySQL 이다.

참고 사이트 :
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

필요사항
JDBC Driver
Connector/J 3.0.11-stable (the official JDBC Driver)

다운을 받은 뒤에
Before you proceed, don't forget to copy the JDBC Driver's jar into $CATALINA_HOME/lib.
톰캣 홈쪽에 lib에 넣어준다.



뭐..그전에 MySQL과 Web어플리케이션이 있어야하겠다.
2012/10/28 - [OpenSource/Spring] - [Spring 환경 구축] step 02 - MySQL을 깔아보자~~~(Windows)
2012/10/28 - [OpenSource/Spring] - [오류] Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
2012/10/28 - [DataBase] - MySQL 기본 문법(데이터베이스 보기, 사용하기)

위의 링크를 통해 MySQL을 셋팅하면 된다.

셋팅이 다 했다는 가정하에 진행 해보겠다.^-^good~

밑에서 처럼 유저를 생성해준다.
javauser <---user명
jaadude <---password
javatest <--- database명 

 
mysql> GRANT ALL PRIVILEGES ON *.* TO javauser@localhost 
    ->   IDENTIFIED BY 'javadude' WITH GRANT OPTION;
mysql> create database javatest;   <-- javatest로 데이터베이스를 생성
mysql> use javatest;       <-- 이 데이터베이스를 사용하겠다.
mysql> create table testdata (  <-- 테이블 생성
    ->   id int not null auto_increment primary key,
    ->   foo varchar(25), 
    ->   bar int);


insert문을 통해 값을 하나 넣어준다. 
mysql> insert into testdata values(null, 'hello', 12345);
Query OK, 1 row affected (0.00 sec)
select를 통해 들어갔는지 확인 해준다.
mysql> select * from testdata;
+----+-------+-------+
| ID | FOO   | BAR   |
+----+-------+-------+
|  1 | hello | 12345 |
+----+-------+-------+
1 row in set (0.00 sec)

mysql>


2. Context configuration(톰캣쪽에 보면 context.xml이 있다.)


 
<Context>

    <!-- maxActive: Maximum number of database connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to -1 for no limit.
         -->

    <!-- maxIdle: Maximum number of idle database connections to retain in pool.
         Set to -1 for no limit.  See also the DBCP documentation on this
         and the minEvictableIdleTimeMillis configuration parameter.
         -->

    <!-- maxWait: Maximum time to wait for a database connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->

    <!-- username and password: MySQL username and password for database connections  -->

    <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
         org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
         Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
         -->
    
    <!-- url: The JDBC connection url for connecting to your MySQL database.
         -->

  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest"/>

</Context>

ex) 글쓴이가 작성한 내용.



3. web.xml(tomcat쪽의 web.xml이 아니다.)
    Now create a WEB-INF/web.xml for this test application.
 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

4. 테스트 코드
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

  <h2>Results</h2>
  
<c:forEach var="row" items="${rs.rows}">
    Foo ${row.foo}<br/>
    Bar ${row.bar}<br/>
</c:forEach>

  </body>
</html>


5. 결과



아파치에서 제공 되어지는 가이드를 보고 해보았다.
굿이다! ^-^good~

'Language > Java' 카테고리의 다른 글

번들 property 만들기  (0) 2013.05.10
JMS란?  (1) 2013.01.07
MySQL+Apache Tomcat 6.0 JNDI Datasource How to  (2) 2012.12.12
JNDI란 정확히 뭔데??  (2) 2012.12.12
[용어] JNDI  (0) 2012.11.12
Failed to create the Java Virtual Machine  (0) 2012.09.07

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

  • 남처리 2015.07.20 01:45 신고 답글 | 수정/삭제 | ADDR

    감사합니다. 많은 도움이 되었습니다.

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2015.07.21 02:03 신고 수정/삭제

      도움이 되어서 다행이네요!
      즐프하세요~~^0^good~

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

JNDI란 정확히 뭔데??

Language/Java 2012.12.12 15:21
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

2012/11/12 - [Language/Java] - [용어] JNDI

JNDI...(Java Naming and Directory Interface)
이름만으로는 도저히..@_@;;; 뭐하는 건지 자세히는 모르겠다.
그냥 이름과 디렉토리로 어떻게 하는건가???? 라는 물음표만 남을뿐..



JNDI is a standard interface to naming and directory services for enterprise applications
음... 위의 영어로 된 내용도 너무 추상적이다--;;; 대충 엔터프라이즈 애플리케이션을 위한 네이밍과 디렉토리 서비스 표준 인터페이스이다..라고만 대충 알고 우선은 넘어가자!!



  • Learn the concepts of naming services(네이밍 서비스의 개념)

    여러 분산 시스템들이 있다고 하자. Naming은 이런 분산 시스템들의 서비스들 중에 하나 이다.
    그리고 바인딩이라는것이 있는데 예를 들면 acet.pe.kr 는 ip address100.200.300.400 이였던 것이다.
    소위 DNS(Domain Naming Service)을 생각하면 더 빠르게 이해가 될 듯 싶다.
    즉, 핵심은 Naming - Binding 의 형태로 서비스를 하는 것이다.

  • Learn the concepts of directory services(디렉토리 서비스의 개념)
    디렉토리 서비스..는??
    빠른조회, 드문 삽입, 삭제, 수정에 대한 저장오브젝트들인 특별한 타입의 데이터베이스라고 볼 수 있다.
    LDAP 이 가장 인기있는 directory protocol 이다. 표준 네트워크 디렉토리 서비스 이다.

  • Explore the JNDI architecture(JNDI의 아키텍처)
    JNDI is a unified Java API designed to standardized access to
    a variety of naming and directory services

    2가지로 구분 되어진다. API, SPI

    • An application-level programming interface (API). APIs are used by the application components to access naming and directory services.
      우리가 잘 알고 있는 API 형태

    • A service provider interface (SPI). This part of the API is used to plug in a provider of a naming and directory service to the J2EE platform.
      API의 부분으로써 J2EE플랫폼 기반에 네이밍과 디렉토리 서비스의 제공자를 연결시킨다.
      즉 SPI가 LDAP, DNS, NDS등 서비스 제공자들을 연결 시킨다.

    The JNDI model defines a hierarchical namespace in which you name objects.
    Each object in the namespace may have attributes that can be used to search for the object.


  • Learn the JNDI API classes and interfaces
    The main JNDI API package is the javax.naming package, which contains one key class, InitialContext, and two key interfaces, Context and Name.

  • Study the JNDI context and its operations

    After a client connects to the JNDI service and obtains a JNDI context using InitialContext(), it can apply any of the interface methods. The main operations of the javax.naming.Context interface are the use of bind()
    to add an entry,
    rebind() to replace an entry name, lookup() to find or locate an object, and unbind() to delete an entry.

  • Explore how to use the JNDI to support other J2EE services
    JNDI is a fundamental service to all J2EE applications. One key target is the isolation of the development of J2EE component code from the deployment environment. This allows an application component to be customized without the need to access or change its source code.JNDI defines a logical namespace (directory) that application components (such as EJBs, servlets, JavaServer Pages [JSPs], and JDBC) can use to name resources, components, and other data. The namespace is provided to a component by its container, which executes the component. Typically, a component has a deployment descriptor that contains, among other data, information about the logical names and types of resources that the component references. Components of the Web tier are specified in the web.xml deployment descriptor, and those of the EJB tier are specified in the ejb-jar.xml deployment descriptor.

위에 것들은 읽어보면 좋을 것 같아서 발췌했다.

참고 사이트 : http://ejbvn.wordpress.com/category/week-1-enterprise-java-architecture/day-04-using-jndi-for-naming-services-and-components/#ch04fig02


그리고 조금 더 찾다가보니 정말 정리가 잘된 곳을 발견! 역시...

다시 한번 정리 해보자면..


Naming 서비스는 Java Naming and Directory Interface(JNDI) API를 이용하여 자원(Resource)를 찾을 수 있도록 도와주는 서비스이다.
Naming 서비스를 지원하는 Naming 서버에 자원을 등록하여 다른 어플리케이션에서 사용할 수 있도록 공개하고, Naming 서버에 등록되어 있는 자원을 찾아와서 이용할 수 있게 한다.


Java Naming and Directory Interface(JNDI)

Java Naming and Directory Interface(JNDI)는 Java 소프트웨어 클라이언트가 이름(name)을 이용하여 데이터 및 객체를 찾을 수 있도록 도와주는 디렉토리 서비스에 대한 Java API이다.

참고사이트 : http://www.egovframe.org/wiki/doku.php?id=egovframework:rte2:itl:naming_service
                   http://en.wikipedia.org/wiki/JNDI


음.. JNDI를 통해 Datasource에 접근한다고 해서 찾아보았는데..
JNDI가 이제는 대충 감이 왔다. 이제는 이 개념을 가지고 실전에서는 어떤 방식으로 어떻게 하고 있는지를  봐야 할 것 같다.

-끝-


'Language > Java' 카테고리의 다른 글

JMS란?  (1) 2013.01.07
MySQL+Apache Tomcat 6.0 JNDI Datasource How to  (2) 2012.12.12
JNDI란 정확히 뭔데??  (2) 2012.12.12
[용어] JNDI  (0) 2012.11.12
Failed to create the Java Virtual Machine  (0) 2012.09.07
자바 보안  (0) 2012.06.04

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바