database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Devel 266 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 266
Java in Adaptive Server Enterprise
작성자
이진욱(jinuki)
작성일
2002-01-10 16:08
조회수
15,098

Java in ASE

 

내용이 좀 길고, 복잡합니다... 차근 차근 해보시면 잘 되리라 믿고 설명하겠습니다...

잘 안되시거나 의문사항은 Q&A에 올려주십시요... 꼬옥 성심성의껏(?) 답변해드리겠습니다...

내용은 java in adaptive server enterprise(www.sybase.com에서 다운로드) 메뉴얼을 참조하여 정리하였습니다..

 

먼저, 총론으로 간단히 설명드리면

장점

- T-SQL의 한계를 극복할 수 있다.

- 객체개념의 설계가 가능하다.

단점

- 설치가 복잡하다.

- 수행속도가 느리다.

- 초기 설계가 매우 중요함.

 

수행속도는 아무래도 java니까 느리더군요...

다음버전에 jit compilor를 지원한다고 하니 성능개선은 있을 것 같습니다..

 

자 이제부터 데이타베이스안에서 자바를 이용할 수 있는 기능에 대해 설명하겠슴다..

------------------------------------------------------

* SQLJ는 다음과 같은 세가지 파트로 나누어집니다.

• Part 0 – ESQLC와 같은 형태의 JAVA 지원

• Part 1 – 데이타베이스내의 함수와 프로시져에서의 JAVA 사용

• Part 2 – SQL 데이타타입을 위한 Java Class 사용.

 

 

* 현재, ASE(12.0이상)는 다음과 같은 두가지 기능을 제공합니다.(Part 1과 Part 2 지원)

• Java user-defined functions (UDFs)

• Java classes as datatypes in SQL

 

 

* ASE에서 JAVA를 사용하기 위한 선행조건

1. JDK Install

2. ASE Java Option 설정

3. JDBC Setting

4. 환경변수 설정

 

 

1. JDK Install

http://java.sun.com/ 에서 download 가능

 

 

2. ASE Java Option 설정

trial key임다..(이건 직접 구매해서 받아야 하더군요... sybase에 요청해서 trial key 받은걸 올립니다.)

 

- - - - - - - - - - - - - Cut below - - - - - - - - - - - - - -

INCREMENT ASE_SERVER SYBASE 12.0 9-jul-2002 uncounted 1C2AE12CF97D \ HOSTID=DEMO

INCREMENT ASE_JAVA SYBASE 12.0 9-jul-2002 uncounted 7F5FE72CF26A \ HOSTID=DEMO

- - - - - - - - - - - - - Cut above - - - - - - - - - - - - - -

 

- profile에 다음 환경변수를 설정한다.(ksh인 경우)

export LM_LICENSE_FILE=/ESD/jinuki/SYSAM-1_0/licenses/license.dat

(해당 ASE의 license file로 지정함)

 

- license.dat file에 trial key를 등록

SERVER hostname ANY 29722

VENDOR SYBASE /sybase/SYSAM-1_0/bin/SYBASE

USE_SERVER

 

INCREMENT ASE_SERVER SYBASE 12.0 23-oct-2001 uncounted B8CCE036F066 \ HOSTID=DEM

INCREMENT ASE_JAVA SYBASE 12.0 9-jul-2002 uncounted 7F5FE72CF26A \ HOSTID=DEMO

 

- ASE로 login하여 다음을 설정

$ isql –Usa –P

1> sp_configure "enable java", 1

2> go

 

 

- ASE shutdown

 

- license관련 process 구동

$SYBASE/$SYBASE_SYSAM/bin/lmgrd -c $LM_LICENSE_FILE&

 

- ASE start

 

- Java Option의 확인

$ isql –Usa –P

1> sp_configure "enable java"

2> go

 

* 자세한 내용은 SySAM Manual 참조 요망(이 부분이 젤 어려울 듯 싶네요... 메뉴얼을 보시라는 말외에는 별루 드릴말이 없네요... 쩝)

 

3. JDBC의 설정

ASE의 jConnect를 사용

jConnect 5.2 <= Java 1.2 이상

jConnect 4.2 <= Java 1.2 미만

 

4. 환경변수의 설정

export JDBC_HOME=$SYBASE/jConnect-5_2

export JAVA_HOME=/usr/java1.2

export CLASSPATH = /usr/java1.2/jre/lib/rt.jar: $JDBC_HOME/classes/jconn2.jar: $CLASSPATH

export PATH=/usr/java1.2/bin:$PATH

 

 

 

* java 기능의 확인

$ isql -Usa -P

1> select java.lang.Math.sqrt(4)

2> go

--------------------

2.000000

(1 row affected)

 

만일, 원하는 결과가 나오지 않고 메세지가 출력되는 경우는 위 설정이 제대로 되지 않는 경우임.

 

설정이 조금 복잡하죠??? 인내를 가지시고 해보시면 잘 될겁니다...

 

여기까지 하셨다면, 이미 상당한 공력의 소유자리라고 믿고 이제부터 본론에 들어가겠습니다...

재미없는 설정부분은 여기까지고요.... 이제 database안에서 java를 쓸 수 있는 실제 작업으로 들어가 보겠습니다..

 

 

 

=====================================================================

User Defined Fuction

=====================================================================

 

작업순서

1. 자바 소스 작성

2. 컴파일

3. ASE에 Install

4. ASE에서 Java Function 활용

 

자바 소스 작성(두 숫자를 입력받아, 큰값과 작은값을 return하는 함수)

public class Misc implements java.io.Serializable
{
	public static void Misc () { }

    public static int maxNum(int a, int b)
    {
      if (a>b)
		  return a;
	  else
		  return b;
     }

    public static int minNum(int a, int b)
    {
      if (a	sp_helpjava
2>	go

* Function을 호출.
1>	select Misc.maxNum(2,10)
2>	go
1>	select Misc.minNum(2,10)
2>	go

만약 integer  type의 a,b 컬럼을 가진 testtbl이라는 테이블이 존재한다면
1>	select Misc.maxNum(a,b), Misc.minNum(a,b) from testtbl
2>	go


* 이미 ASE에 Install되어있는 class를 OS로 빼내으려면
$ extractjava –j 'jcs.jar' –f 'jcs.jar' –Usa –P –Ssyb_jinuki -Dtestdb

* 이미 ASE에 Install되어있는 class를 삭제하려면(isql에서)
$ remove java jar 'jcs.jar'

이 함수는 예전에 필요했었는데, 없어서 고민했던 기억에 자바로 구현해 보았습니다...
음 속도만 빠르다면...... 더 바랄것이 없겠거늘......
(초기에 메모리로 로딩하는 시간이 걸리구요... 그 다음부터는 빨리 수행됩니다..)

=====================================================================
 User Defined Type 
=====================================================================

 	작업순서
1.	자바 소스 작성
2.	컴파일
3.	ASE에 Install
4.	ASE에서 Java Function 활용


1.	자바 소스 작성
public class  Address implements java.io.Serializable  {

   public String street;
   public String zip;

   public Address ( ) {
      street = "Unknown";
      zip = "None";
   }

   public Address (String S, String Z) {
      street = S;
      zip = Z;
   }

   public String display( ) {
      return  street + zip;
   }

   public String toString( ) {
      return  "Street= " + street + "  ZIP=" + zip;
   }

   public void removeLeadingBlanks( ) {
street = Misc.stripLeadingBlanks(street);
      zip = Misc.stripLeadingBlanks(street);
   }
}
위 소스를 Address.java라는 이름으로 저장하고 나서 compile을 합니다.

2.	compile
$ javac Address.java

3.	ASE에 Install
$ jar cf0 Misc.jar Address.class
$ installjava –f “Address.jar” –Usa –P –Ssyb_jinuki –Dtestdb


4.	ASE에서의 Java Class Type활용
* test table 생성
create table testtbl ( a int, b Address)

* test data 입력
insert into testtbl values (1, new Address('10-16','140022'))

* data 확인
select * from testtbl
a           b
----------- --------------------------------------------------
1 Street= 10-16   ZIP=140022

* Address Class의 member 변수 select
select a, b>>street, b>>zip from testtbl
a
----------- ------------------------ ------------------------
1       10-16            140022

* Address의 display method를 이용하여 data select
select a, b>>display() from testtbl
a           
----------- --------------------------------------------------
1       10-16 140022

* 데이타의 갱신
update testtbl set b>>street = '용산동2가 10-16'

* 데이타 확인
select * from testtbl
a           
----------- --------------------------------------------------
1       용산동2가 10-16 140022

주의사항

이미 정의된 클래스를 이용하여 Data Type으로 쓰고 있는 경우, 클래스를 다시 수정할 경우, 이미 저장되어 있는 데이타는 에러가 발생함.

클래스의 수정시 기저장된 자료는 별도의 작업이 필요함.

또한, 사용중인 클래스는 remove할 수 없슴.

 

 

 

여기까지 오시느라 매우 고생하셨습니다...

굳이 실행을 못해보더셨다면 이런 기능이 있다 정도로 생각하심 될 듯 싶습니다...

저도 많은 시행착오를 겪어서 했구요....

 

암튼 조금이라도 도움이 될까 하는 마음에서 정리해봤습니다...

 

 

 

 

 

 

별 첨

installjava (Windows는 instjava.exe라는 파일으로 존재함)
Usage:  installjava
        -f file_name
        [ -new | -update ]	<- 만일 이미 존재하는 클래스라면 update를 사용
        [ -j jar_name ]
        [ -S server_name ]
        [ -U user_name ]
        [ -P password ]
        [ -D database_name ]
        [ -I interfaces_file ]
        [ -a display_charset ]
        [ -J client_charset ]
        [ -z language ]
        [ -t timeout ]
        [ -v ] [ -h ]

사용예) installjava –fMisc.jar –update –Usa –P –Ssyb_jinuki –Dtestdb

 

remove

데이타베이스에서 특정 Java Class를 삭제하려면 ASE에서

remove java package “Misc”

remove java class “Misc”

 

extractjava

extractjava 를 이용하시면 거꾸로 Database로부터 jar file을 생성할 수 있습니다.

option은 installjava와 동일

(Windows에서는 extrjava.exe임)

이 글에 대한 댓글이 총 1건 있습니다.

좋은 글 감사 드립니다. 진욱님...

 

Sybase 는 잘 사용을 안해봐서 뭐라 말씀을 드리지 못하겠군요. 일단 저가 궁금한 것은 Sybase 에서 SQLJ 를 어느 정도까지 지원해 주는지가 궁금하고, 과연 속도가 일반적인 SQL, T-SQL 을 사용할때와 비교해서 어느 정도의 차이가 나는지... 그리고 그러한 속도의 상실을 감쇄시킬 정도로 Java 의 사용이 이점이 있는지 하는 등에 대해서 궁금합니다.

 

그리고 이번 강의물과 같이 indentation 등이 필요할 경우 [pre ] .......... [/pre ] 와 같으 태그를 이용하시기 바랍니다. <pre>.......</pre> 태그와 유사한 효과를 준답니다.

정재익(advance)님이 2002-01-23 01:08에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
266Java in Adaptive Server Enterprise [1]
이진욱
2002-01-10
15098
262JDBC를 이용하여 ASE/ASIQ 데이타를 가져오는 방법
jinuki
2002-01-09
15707
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.039초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다