Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents
maxLevel2

 

 

개요 

...

본 문서는 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
themeDJango
languagesql
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/bin
$JEUS_HOME/webserver/bin
$JEUS_HOME/lib/system

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
themeDJango
languagesql
[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
themeDJango
languagesql
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
themeDJango
languagesql
<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
themeDJango
languagesql
<destroy-policy-on-check-query>AllConnections</destroy-policy-on-check-query>

 

커넥션 풀 모니터링

...

커넥션 풀을 모니터링 하는 방법은 jeusadmin을 이용하는 방법과 WebAdmin을 이용하는 방법이 있다. 이번 절에서는 jeusadmin을 이용하여 커넥션 풀을 모니터링 하는 방법에 대해서 설명한다.

...

Code Block
themeDJango
languagesql
2edcf6a9ba4d44b>testdsconfig datasource1
Configuration is valid. You can use it.

 

 

샘플 예제

...

Altibase와 JEUS의 연동 방법에 대해서 알아봤다면, 본 절에서는 위 Node 설정을 이용하여 Altibase에 접속 및 쿼리를 수행함으로써   Altibase와 JEUS의 연동을 확인해본다.

 

Pool 사용 샘플 예제

...

Code Block
themeDJango
languagesql
<%@ 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
themeDJango
languagesql
<%@ 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 파일을 디플로이한 후에 테스트하는 방법에 대해서 설명한다.

...