Java 프레임워크 만들기 - JSP

자바 JNDI 연동 2 - Java JNDI(Java Naming and Directory Interface), 이클립스(Eclipse)

carrotweb 2021. 6. 26. 22:40
728x90
반응형

9. "test2" 프로젝트의 "Java Resources/src/main/java"에서 "com.home.project.test2.dao.TestLoginDaoImpl.java"의 멤버 필드 형을 "TestDatabaseConectionPool"에서

@TestAnnAutowired
@TestAnnQualifier("databaseMaria")
private TestDatabaseConectionPool testDatabaseManager;

"TestDatabaseJNDI"로 수정합니다.

@TestAnnAutowired
@TestAnnQualifier("databaseMaria")
private TestDatabaseJNDI testDatabaseManager;

 

10. "Servers"탭에서 "tomcat8"를 선택하고 "start"버튼(start the server)을 클릭합니다. 웹 브라우저에서 "http://localhost:8080/test2/testform.do"를 입력합니다. 아이디에는 "testid"를 패스워드에는 "testpwd"를 입력하고 "로그인"버튼을 클릭합니다.

 

"Console"탭을 보면 다음과 같이 마리아 JDBC 드라이버를 로드할 수 없다고 경고 메시지가 나타납니다.

java.sql.SQLException: Cannot load JDBC driver class 'org.mariadb.jdbc.Driver'

 

[Console]

6월 26, 2021 9:49:29 오후 org.apache.naming.NamingContext lookup
경고: Unexpected exception resolving reference
java.sql.SQLException: Cannot load JDBC driver class 'org.mariadb.jdbc.Driver'
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2138)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getLogWriter(BasicDataSource.java:1587)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:594)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:274)
	at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
	at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1084)
	at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:663)
	at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:256)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:95)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:779)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: java.lang.ClassNotFoundException: org.mariadb.jdbc.Driver
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2129)
	... 24 more

6월 26, 2021 9:49:29 오후 org.apache.catalina.core.NamingContextListener addResource
경고: Failed to register in JMX: javax.naming.NamingException: Cannot load JDBC driver class 'org.mariadb.jdbc.Driver'

 

Maven를 통해 "mariadb-java-client-2.7.2.jar"파일이 등록되어 있어 "org.mariadb.jdbc.Driver" 클래스는 있습니다.

"Tomcat"에서 "stop"버튼(stop the server)을 클릭하여 종료합니다.

마리아 JDBC 드라이버를 로드할 수 없다고 경고 메시지는 나타나는 이유는 Tomcat이 설치되어 있는 "lib"에 마리아 JDBC 드라이버가 없기 때문입니다.

11. "test2" 프로젝트의 "Java Resources"에서 "Libraries"의 "Maven Dependencies"에서 "Jmariadb-java-client-2.7.2" 파일을 선택합니다. 그러면 하단에 Jar파일이 저장되어 있는 위치가 나타납니다.

탐색기로 파일 위치에서 "mariadb-java-client-2.7.2.jar"를 선택하고 "Ctrl+C"로 복사합니다.

또는 마우스 오른쪽 버튼을 클릭하여 콘텍스트 메뉴에서 [Properties]를 선택하고 [Java Source Attachment]를 선택하고 "External location"의 "Path"에서 "External File..."버튼을 클릭합니다.

 

"mariadb-java-client-2.7.2.jar"를 선택하고 "Ctrl+C"로 복사합니다.

 

12. Tomcat이 설치된 폴더에 있는 "lib"폴더에 "mariadb-java-client-2.7.2.jar"를 "Ctrl+V"로 붙여넣기 합니다.

 

13. 다시 "Tomcat"에서 "stop"버튼(stop the server)을 클릭하면 마리아 JDBC 드라이버를 로드할 수 없다는 경고 메시지가 없어집니다.

 

14. 디비버(DBeaver) 툴을 실행하고 쿼리 스크립트에 현재 연결된 커넥션 수를 확인하기 위해 다음과 같이 입력합니다.

show status like 'Threads_connected';

"SQL문을 실행"버튼을 클릭하면 최초에 데이터베이스와 연결되는 커넥션 수(initialSize) 만큼 연결되어 있는 것을 확인할 수 있습니다.

"<GlobalNamingResources>"태그안에 "<Resource>"태크에 "initialSize" 속성 값을 보면 20으로 선정되어 있는 것을 확인 할 수 있습니다.

결과 값이 23인 것은 디비버(DBeaver) 툴이 실행되면서 연결되는 커넥션 수이 3개가 있기 때문입니다.

그러면 실제로 커넥션이 어떻게 연결되어 있는 확인 하기 위해 다음과 같이 디비버(DBeaver) 툴의 쿼리 스크립트에 입력하고 "SQL문을 실행"버튼을 클릭합니다.

show processlist;

23개의 커넥션 리스트가 나타납니다. "DB"에 "test"라고 있는 커넥션들이 JNDI를 통해 생성된 커넥션들 입니다.

15. "Servers"탭에서 "tomcat8"를 선택하고 "start"버튼(start the server)을 클릭합니다. 웹 브라우저에서 "http://localhost:8080/test2/testform.do"를 입력합니다. 아이디에는 "testid"를 패스워드에는 "testpwd"를 입력하고 "로그인"버튼을 클릭합니다.

 

"Console"탭을 보면 JNDI를 통해 커넥션을 가져와 쿼리가 실행된 것을 확인할 수 있습니다.

[Console]

id : testid, password : testpwd
[http-nio-8080-exec-3] 데이터베이스 커넥션 객체[603660674, URL=jdbc:mariadb://localhost:3306/test, UserName=root, MariaDB Connector/J]를 가져옴
PreparedStatement를 생성함
Query[sql : 'SELECT MBR_ID, MBR_PWD, MBR_PWD_SALT, MBR_NM FROM MBR_ACCOUNT_TB WHERE MBR_ID=?', parameters : ['testid']]를 실행함
PreparedStatement를 종료함
[http-nio-8080-exec-3] 데이터베이스 커넥션 객체[603660674, URL=jdbc:mariadb://localhost:3306/test, UserName=root, MariaDB Connector/J]를 반환함
49ms 소요됨
728x90
반응형