...
Table of Contents | ||
---|---|---|
|
개요
...
본 문서는 Altibase v6.3.1과 JEUS6.0을 연동하여 운영하기 위한 가이드 문서로써 JEUS6.0을 설치하는 방법 및 환경변수 설정에 대해서 가이드를 제시한 후, Altibase와 연동하는 방법에 대해서 기술하도록 한다.
...
Note |
---|
이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다. 이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다. Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다. |
JEUS 설치
...
JEUS를 설치하는 방법에는 콘솔모드를 이용한 설치 방법과 GUI 모드에서 설치하는 두 가지의 방법이 있으며, 본 절에서는 Unix/Linux 콘솔 모드에서 JEUS를 설치하는 과정과 Windows GUI 모드에서 JEUS를 설치하는 과정에 대해서 알아본다. JEUS6.0은 JDK 5.0 Update 4(1.5.0_04) 이상이 설치되어 있어야 하며, 300M 이상의 하드디스크 여유공간을 필요로 한다.
기본 설치(콘솔 모드)
...
다음의 하위 절은 텍스트 기반 쉘에서 실행하는 방법을 설명한다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
Pre-Installation Summary ------------------------ Please Review the Following Before Continuing: Product Name: JEUS6.0 Install Folder: /app/was/jeus6 Install Set Full Install Disk Space Information (for Installation Target): Required: 308,147,759 bytes Available: 45,215,862,784 bytes PRESS <ENTER> TO CONTINUE: |
환경 변수 설정
...
JEUS는 다음과 같은 시스템 환경 변수들을 요구한다. 이 변수들은 설치 시 적용되며 환경변수 PATH는 환경변수 파일인 .profile, .cshrc 등에 기록하고 나머지 환경변수는 $JEUS_HOME /bin/jeus.properties 파일에 설정된다.
...
환경 변수 | 의미 | 설정값 |
---|---|---|
PATH | 시스템 경로 | 다음을 포함하고 있어야 한다. |
JEUS_HOME | JEUS 설치 디렉토리 | $HOME/jeus6/ |
JEUS_BASSPORT | JEUS가 사용할 네트워크 포트 가운데 가장 기본이 되는 포트(기본: 9763) | 9763 |
JEUS_LIBPATH | JEUS 라이브러리 파일 | $JEUS_HOME/lib/system |
JAVA_HOME | JAVA2 설치 디렉토리 | $JAVA_HOME |
JEUS 디렉토리
...
다음의 항목들은 설치된 JEUS의 홈 디렉토리의 하위 디렉토리들이다.
...
Bin: JEUS 실행파일이 포함된 디렉토리
Config: XML 디스크립터 파일, 노드 설정파일, 보안설정 파일이 포함된 디렉토리
Derby: 예제 실행 및 테스트를 위해 사용하는 데이터베이스
Docs: JEUS 매뉴얼과 API 파일이 포함된 폴더
Lib: JEUS에서 사용하는 라이브러리 파일의 폴더. JEUS 클래스 라이브러리 아카이브가 jeus.jar 에 포함되어 있다.
License: JEUS 라이선스 파일의 폴더
Logs: 로그 파일의 폴더
Samples: 예제가 있는 폴더
Sessiondb: JEUS에서 session server 사용 시 생성되는 폴더. 설치 과정에서 생성되지 않고 JEUS를 1회 이상 부팅한 후에 생성된다.
UninstallerData: Unistall 을 위한 폴더
Webhome: EJB, Servlet, JSP 어플리케이션의 배치 폴더
Webserver: Servlet Engine 리스너인 JEUS 웹 서버 폴더
Workspace: JEUS가 사용하는 임시 폴더. Sessiondb 폴더와 마찬가지로 JEUS 1회 이상 부팅 후에 생성된다.
JEUS 기동 확인
...
JEUS 설치가 정상적으로 완료되었음을 확인하기 위해서 다음 단계들을 수행한다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
[tmax@dev ~]$ ps -ef | grep jeus tmax 1729 1705 0 14:35 pts/0 00:00:00 /bin/sh /app/was/jeus6/bin/jeus tmax 1735 1729 8 14:35 pts/0 00:00:23 /app/java/jdk1.6/bin/java -server -Xmx512m -Xbootclasspath/p:/app/was/jeus6/lib/system/extension.jar -classpath /app/was/jeus6/lib/system/bootstrap.jar -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.library.path=/app/was/jeus6/lib/system -Djava.endorsed.dirs=/app/was/jeus6/lib/endorsed -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djava.net.preferIPv4Stack=true -Djava.util.logging.config.file=/app/was/jeus6/bin/logging.properties -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djeus.home=/app/was/jeus6 -Djeus.log.home=/app/was/jeus6/logs -Djeus.baseport=9736 -Djeus.jvm.version=hotspot -Djeus.tm.checkReg=true -Djeus.tool.webadmin.locale.language=ko -Djeus.net.reuseAddress=true -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net jeus.server.JeusBootstrapper tmax 2016 1799 0 14:40 pts/1 00:00:00 grep jeus [tmax@dev ~]$ |
설치 시 유의사항
...
JEUS를 설치할 때의 유의 사항에 대해서 설명한다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
java.lang.UnsatisfiedLinkError: $HOME/jeus6/lib/system/libRunner.so: /lib64/tls/libc.so.6: version `GLIBC_2.4' not found (required by $HOME/jeus6/lib/system/libRunner.so) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676) at java.lang.Runtime.loadLibrary0(Runtime.java:822) at java.lang.System.loadLibrary(System.java:993) at jeus.util.Runner.<clinit>(Runner.java:31) at jeus.server.JeusServer.main(JeusServer.java:916) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at jeus.server.Bootstrapper.callMainMethod(Bootstrapper.java:299) at jeus.server.Bootstrapper.callMain(Bootstrapper.java:371) at jeus.server.Bootstrapper.main(Bootstrapper.java:365) at jeus.server.JeusBootstrapper.main(JeusBootstrapper.java:8) |
Altibase와 JEUS 연동
...
Altibase와 JEUS를 연동하여 사용하기 위한 설정 방법에 대해서 설명한다.
JDBC 드라이버
...
JDBC란 자바 응용프로그램에서 데이터베이스에 연결하여 여러 SQL을 실행할 수 있도록 제공하는 표준 인터페이스를 말한다.
이러한 JDBC 드라이버는 각 데이터베이스 벤더사가 제공하고 있으며, Altibase에서는 Altibase.jar 파일로 제공하고 있다. 이 JDBC 드라이버는 $ALTIBASE_HOME/lib 디렉토리 안에 존재한다.
Altibase v5 부터는 $ALTIBASE_HOME/lib 디렉토리에 Altibase.jar와 Altibase5.jar 파일이 존재하는데, Altibase.jar는 일반 Altibase JDBC 드라이버 파일이며, Altibase5.jar는 Altibase v5 그 이하의 버전을 함께 사용하고 싶을 때 사용하는 파일이다. 따라서 하나 이상의 Altibase 와 연동하기를 원한다면 일반적으로 Altibase5.jar 파일을 사용한다.
JDBC 드라이버 설정
...
Altibase와 JEUS를 연동하기 위해서는 Altibase에서 제공하는 JDBC 드라이버(Altibase.jar)를 $JEUS_HOME/lib/datasource 디렉토리에 위치시켜야 한다.
커넥션 폴링
...
커넥션 풀링(Connection Pooling)은 DB 커넥션의 캐쉬를 위한 하나의 프레임워크이다. 커넥션 풀이 시작될 때 특정한 수의 물리적 커넥션을 만들며 이는 어플리케이션 실행 중에 커넥션 생성을 위한 오버헤드를 줄여준다.
커넥션 풀의 이점은 다음과 같다.
...
동시 커넥션들의 수를 제어할 수 있다. 동시 커넥션들의 최대 수를 구성함으로써 DB의 동시 커넥션을 제한하는 작업을 효율적으로 할 수 있다.
데이터 소스
...
하나의 javax.sql.DataSource는 어플리케이션과 커넥션 풀 사이의 인터페이스이다. javax.sql.DataSource 객체는 DB 커넥션들의 팩토리로 볼 수 있으며 java.sql.DriverManager 보다 많은 이점을 제공한다.
...
커넥션 풀 데이터 소스에서 얻은 커넥션을 Autocommit을 꺼서 로컬 트랜잭션이 항상 켜진 상태로 사용하고 커밋이나 롤백을 트랜잭션 매니저가 처리해준다. 이 때문에 로컬 트랜잭션을 XA에 참여하도록 에뮬레이션 할 수 있다. 참고로 로컬 XA 데이터 소스는 JDBC 드라이버가 XA 데이터 소스를 지원하지 않더라도 XA에는 참여시킬 필요가 있을 때 사용할 수 있다.
로컬 XA 데이터 소스는 기능상의 제약으로 제대로 복구가 되지 않을 경우가 생길 수 있으며, 하나의 글로벌 트랜잭션 내에서 최대 하나의 로컬 XA 데이터 소스만 참여할 수 있다.
데이터 소스 구성
...
Altibase와 JEUS를 연동하기 위해서 JEUSMain.xml에 데이터 소스를 설정할 수 있다. Javax.sql.DataSource의 속성들은 각 드라이버별로 다르기 때문에 사용하기 원하는 드라이버의 특성을 파악하고 그 특성에 맞게 설정해야 한다.
...
Note |
---|
Connection Pool data source 명으로 6.1.1 이하 버전에서는 Altibase.jdbc.driver.ABConnectionPoolDataSource 을 사용한다. ALTIBASE 6.3.1 이상 버전부터는 Altibase.jdbc.driver.AltibaseConnectionPoolDataSource 를 사용하므로 class 설정시 주의해야 한다. class 명이 잘못되었을 경우 jeus 로그에 java.lang.ClassNotFoundException: Altibase.jdbc.driver.ABConnectionPoolDataSource 또는 java.lang.ClassNotFoundException: Altibase.jdbc.driverAltibaseConnectionPoolDataSource exception 이 발생하게 된다. |
데이터 소스 설정
...
Altibase와 JEUS를 연동하여 사용하기 위해 데이터 소스를 설정하는 방법에는 콘솔모드에서 직접 XML 파일을 수정하는 방법과 WebAdmin 을 이용한 GUI 모드에서 설정하는 두 가지의 방법을 제공한다.
...
“Data Source Class Name” ~ “Password” 항목들을 설정해준다. “Data Source Class Name”를 설정할 때는 AltibaseConnectionPoolDataSource로 입력하면 안되고, JDBC 드라이버의 데이터 소스 클래스의 이름. 패키지 명을 포함하는 완전한 형태로 입력해야 한다(Altibase.jdbc.dirver.AltibaseConnectionPoolDataSource)
연결풀 설정 및 바인드, 테스트는 BlackboxConnectionPoolDataSource의 설정을 참고하면 된다.
데이터 소스 설정 시 유의 사항
...
1. AltibaseConnectionPoolDataSource 사용 시 유의 사항
...
Code Block | ||||
---|---|---|---|---|
| ||||
<property> <name>encoding</name> <type>java.lang.String</type> <value>KSC5601</value> </property> <property> <name>maxPoolSize</name> <type>java.lang.Integer</type> <value>10</value> </property> |
체크 쿼리
...
어플리케이션이 JDBC 커넥션 요청을 했을 때, 특정 SELECT 쿼리를 보내서 커넥션의 상태를 점검하는 기능이다. JDBC 커넥션의 내부적인 에러로 인한 끊김, 방화벽에 의한 소켓 끊김 현상 등을 체크할 때 유용하다. 점검이 실패하면 물리적 커넥션을 새로 만들어서 그에 대한 핸들을 어플리케이션으로 리턴해 준다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
<destroy-policy-on-check-query>AllConnections</destroy-policy-on-check-query> |
커넥션 풀 모니터링
...
커넥션 풀을 모니터링 하는 방법은 jeusadmin을 이용하는 방법과 WebAdmin을 이용하는 방법이 있다. 이번 절에서는 jeusadmin을 이용하여 커넥션 풀을 모니터링 하는 방법에 대해서 설명한다.
...
Code Block | ||||
---|---|---|---|---|
| ||||
2edcf6a9ba4d44b>testdsconfig datasource1 Configuration is valid. You can use it. |
샘플 예제
...
Altibase와 JEUS의 연동 방법에 대해서 알아봤다면, 본 절에서는 위 Node 설정을 이용하여 Altibase에 접속 및 쿼리를 수행함으로써 Altibase와 JEUS의 연동을 확인해본다.
Pool 사용 샘플 예제
...
Code Block | ||||
---|---|---|---|---|
| ||||
<%@ page import="javax.naming.*" %> <%@ page import="java.sql.*" %> <%@ page import="javax.sql.*" %> <% Connection con=null; Statement st=null; ResultSet rs=null; try { InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("DataSource1"); con=ds.getConnection(); st=con.createStatement(); rs=st.executeQuery("select * from dual"); while(rs.next()) { out.println("TABLE_NAME :" + rs.getString(1)+"<br>"); } } catch(Exception e) { out.println("Error:" + e.getMessage()); e.printStackTrace(); } finally { if(rs!=null)rs.close(); if(st!=null)st.close(); if(con!=null)con.close(); } %> |
getConnection 사용 샘플 예제
...
Code Block | ||||
---|---|---|---|---|
| ||||
<%@ page import="java.util.*"%> <%@ page import="java.sql.*"%> <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String db_url = "jdbc:Altibase://127.0.0.1:20300/mydb"; String db_user = "sys"; String db_passwd = "manager"; String enc = "KO16KSC5601"; Properties props = new Properties(); props.put("user", db_user); props.put("password", db_passwd); props.put("encoding", enc); try { try { Class.forName("Altibase.jdbc.driver.AltibaseDriver"); conn = DriverManager.getConnection(db_url, props); out.print(" Connection ok" + "<br>" ); } catch (Exception e) { out.println("### CONN ERROR=>" + e.toString() + "###" + "<br>"); } String Query = "select * from dual"; pstmt = conn.prepareStatement(Query); String get_1 = null; try { rs = pstmt.executeQuery(); while(rs.next()) { get_1 = rs.getString(1); out.println(" get_1 = " + get_1 + "<br>"); } } catch (Exception e) { out.println("### SELECT ERROR=>" + e.toString() + "###" + "<br>"); } } catch (Exception e) { out.println("### ERROR=>" + e.toString() + "###" + "<br>"); try { conn.rollback(); } catch(Exception ex) { out.println("### rollback ERROR=>" + ex.toString() + "###" + "<br>"); } // end of try } finally { try { conn.close(); } catch(Exception ex) { out.println("### close ERROR=>" + ex.toString() + "###" + "<br>"); } // end of try } // end of try %> |
실행방법
...
WebAdmin을 사용하여 JSP 파일을 디플로이한 후에 테스트하는 방법에 대해서 설명한다.
...