※ 책은 Spring 3.0 인데 위의 이미지랑 조금 다름... 몇개 빠져있음, 아마 위에껀 상위버전인듯 3.1 인가'- ';;


- Core, Beans

  스프링의 핵심 모듈. Bean 컨테이너 관련기능을 제공


- Context

   국제화(il8N)나 Java EE 가 제공하는 몇몇 기능(JNDI, EJB, JMX등)을 지원


- AOP

  관점지향 프로그래밍 기능을 제공


- ORM

  Object Relational Mapping 기능을 제공, 


- JDBC

   JDBC 추상화 기능을 제공. JDBC에 의한 데이터베이스 엑서스를 지워나혐, 트랜잭션관리의 기반


- Web

   예를 들어 파일 업로드 같은 웹어플리케이션 이용에 편리한 기능을 제공


- Web Servlet

   웹어플레케이션에 MVC 프레임워크 기능을 제공



- 적는글

   오랜만에 스프링 3.0 서적보면서, 해볼려다가 하는김에 최신버전으로 하고 싶어서 기존과 같은 라이브러리를 찾아봤지만,

   찾지 못했다.

   이유는 스프링의 모듈이 다양해지면서, 더 이상 버전별 라이브러리를 묶어서 따로 배포하지 않는다.

   라이브러리 배포버전 젤 최신은 3.1.4 버전이고, 그 이후의 버전을 사용 할 경우에는,

   Maven 이나, gradle 로 다운받아서 내가 필요한것만 컴파일해서 사용해야한다.

   그래서 3.1.4 버전으로 다시 공부 중'- ' 근데.. 스프링 너무한다. 배째라는 식인데..

   3.1.4 버전까지 스프링 라이브러리 배포판 받는 경로는 여기!!! 남긴다.

   http://docs.spring.io/downloads/nightly/release-download.php?project=SPR

   

- 첨부파일을

  Eclipse_HOME/dropins/plugins/ 안에 넣고,

  이클립스 Window -> Preferences -> General -> Appearance  에서 Theme 를 MoonRise 로 변경

  그 다음 재부팅

com.github.eclipseuitheme.moonrise_0.8.9.jar


해당 제목(Too many open file)과 같은 에러가 나오고, 프로그램이 실행되지 않는다.

1. ulimit -a (시스템의 제한 설정값을 확인)


2. vi /etc/security/limits.conf (해당 파일은 열어서 수정)


3. 제일 하단에 추가


* hard nofile 10240

* sofr nofile 10240

파일 오픈 갯수 증가(아마 기본이 1024일 것이다.)


- BLOB 문자열 Select

SQL) SELECT UTL_RAW.CAST_TO_VARHCAR2(BLOB컬럼명)

          FROM TABLE_NAME


이렇게 하면, 문자열이 정상적으로 나오는데...한글이 깨진다(영어만 정상)'- ' 

이유는 모르겟다. BLOB 넣는 부분은 내가한게아니니'- '

암튼, 구글링해서... 찾음'-' V


위의 쿼리문 실행해서 한글이 깨지면 CONVERT() 로 인코딩 변경

SQL) SELECT CONVERT(UTL_RAW.CAST_TO_VARHCAR2(BLOB컬럼), 'AL32UTF8', 'KO16KSC5601')

          FROM TABLE_NAME


'공부 > ORACLE_SQL' 카테고리의 다른 글

ORACLE_[TOAD 단축키 모음]  (0) 2016.09.13
ORACLE_[ 년,월 임의출력 ]  (0) 2015.07.29
ORACLE_[ 숫자형 함수 ]  (0) 2014.11.04
ORACLE_[ START WITH ~ CONNECT BY ~ (오라클트리구조) ]  (0) 2014.05.26
ORACLE_[ DB_LINK CREATE ]  (0) 2013.11.21

1. 필요성

.실무 프로젝트의 deploy 환경은  3가지(“개발“, “스테이징“, “상용“)로 구분 됩니다.
물론 프로젝트의 상황과 환경에 따라서 다소 차이는 있지만 대부분 위에 언급한
단계로 개발을 진행 합니다.

개발 단계“는 말그대로 “개발을 할수 있는 최소 환경” 입니다. 대부분 이단계에서
개발자들은 많은 시간을 보내고, 테스트도 제일 많이 합니다.

스테이징 단계“는 “기능 및 성능을 테스트 하기 위한 환경” 입니다. 실제로 서비스만
하지 않을뿐 “상용 단계“와 거의 동일 환경으로 구성되어 있습니다.
외부 연동 서버, 성능 테스트를 진행하며 “상용단계“를 위한 최종 검증의 환경이라고 할수 있습니다.

상용 단계” 는 실제로 서비스하고,  고객이 접속하는 환경을 말합니다.

이렇게 개발 환경이 다르기 때문에 당연히 서버 구축 요구 사항도 틀립니다.
예를 들면 “개발 환경” 같은 경우에는  “One Server, One Instance, Multiple Context“를
주로 사용합니다.

하지만 “스테이징 단계” 이상 부터는 아래의 요구 사항을 수용해야 합니다.

  • 하나의 서버에서 2개이상 WAS 버전이 구동 될수 있다.
  • 상위 버전 업그레이드가 용이해야 하며, 기존 서비스 변경은 최소화 해야 한다.
  • 서비스별 튜닝 설정 (WAS, JNDI, Http Connection)이 별도로 구성되어야 한다.
  • 하나의 인스턴스를 Shutdown 해도 다른 서비스에 영향이 없어야 한다.
  • 운영 관리 및 장애 대응에 신속하게 처리 해야 한다.

2. BIG PICTURE

dfdTomcat 디렉토리는 아래의 그림과 같습니다.

  • lib : Tomcat Engine이 사용하는 외부 라이브러리 (.jar) 디렉토리
  • bin : Tomcat를 런하는 명령 스크립트 디렉토리
  • conf : Tomcat Web 서비스를 위한 설정 파일 디렉토리
  • logs : 로그 파일 디렉토리
  • temp : Tomcat Engine에서 사용하는 임시 파일 디렉토리
  • webapps : 웹 어플리케이션 deploy 디렉토리
  • work : JSP 파일이 서블릿으로 컴파일(.class)된 디렉토리

여기서 재미난 유추를 할수 있습니다. “자바 서버군 오픈소스” (특히 Apache Project)의
디렉토리 구조는 Tomcat과 매우 유사한 structure로 되어 있습니다.
대표적인 것이 “하둡” 입니다.
그외에 “Cassandra“, “Flume“, “ActiveMQ“등도 매우 유사 합니다.

Anyway, 사실 Tomcat Engine은  “lib“, “bin” 디렉토리만 사용 합니다.
반면, 실제 서비스를 담당하는 인스턴스들은
conf“, “logs“, “temp“, “webapps“, “work” 디렉토리를 사용 합니다.
여기서 잠시 용어를 정리 하자면 인스턴스라 함은 하나의
jvm“을 말합니다.

그렇기 때문에 아래와 같이 물리적으로 디렉토리를 분리함으로써 “멀티 인스턴스
환경을 구성을 할수 있습니다.

$CATALINA_HOME/bin/startup.sh” 실행하면 실제로 “catalina.sh“이 실행 됩니다.
catalina.sh“은 “CATALINA_HOME” 환경 변수를 통해서 “Tomcat Engine” 디렉토리를
찾고 기동을 위한 준비 합니다. 그리고  “CATALINA_BASE” 환경변수에 있는 디렉토리를
찾아서 해당 인스턴스를 기동 합니다.

그렇기 때문에 2개의 환경변수 설정, 톰캣 디렉토리의 분리,
인스턴스별 기동/중지 스크립트 작성 및
 server.xml 수정을 하면,
어렵지 않게 구현 하실수 있습니다.

여기서 잠시 Tomcat이 사용하는 “환경 변수“에 대해서 간략하게 설명 하겠습니다.

  • CATALINA_HOME : Tomcat Engine 디렉토리
  • CATALINA_BASE : 인스턴스 홈 디렉토리
  • CATALINA_TMPDIR : 인스턴스가 사용하는 임시 디렉토리
  • JAVA_HOME : 자바 홈 디렉토리
  • CLASSPATH : 클래스 패스 설정 정보

3. 설치 환경

.OS : CentOS 5.8 ※OS는 크게 차이가 없습니다.
JDK : 1.6.23
Tomcat : 7.x
Tomcat Home Directory : /home/beyondj2ee/was/tomcat7
Instance1 Directory : /home/beyondj2ee/was/apps/instance1
Instance2 Directory : /home/beyondj2ee/was/apps/instance2
JDK 설치 경로 : /home/beyondj2ee/java
사용자 계정 : beyondj2ee

4. 설치 하기

.(1) Tomcat 및 Java 홈 디렉토리 설정

※ 참고로 Tomcat 과 Java 설치는 생략 했습니다. 이와 관련된 부분은 다른 자료를 참고 하시기 
바랍니다.

OS 홈 디렉토리에 있는 “.bash_profile“를 열어서 아래와 같이 환경 변수를 설정 합니다.

1
2
export JAVA_HOME=~/java
export CATALINA_HOME=~/was/tomcat7

(2) 인스턴스별 루트 디렉토리 생성

각 인스턴스별 디렉토리를 생성 합니다. 여기서는 2개만 생성하도록 하겠습니다.

1
2
# mkdir -p /home/beyondj2ee/was/apps/instance1
# mkdir -p /home/beyondj2ee/was/apps/instance2

(3) 인스턴스별 필수 디렉토리 복사

Tomcat Home” 디렉토리로 이동해서 각 인스턴스에게 필요한 디렉토리들을 복사 합니다.

1
2
3
# cd $CATALINA_HOME
# cp -R * /home/beyondj2ee/was/apps/instance1
# cp -R * /home/beyondj2ee/was/apps/instance2

필요 없는 디렉토리들을 삭제 합니다.

1
2
3
4
# cd /home/beyondj2ee/was/apps/instance1
# rm -rf LICENSE;rm -rf NOTICE;rm -rf RELEASE-NOTES;rm -rf RUNNING.txt;rm -rf ./bin;rm -rf ./lib
# cd /home/beyondj2ee/was/apps/instance2
# rm -rf LICENSE;rm -rf NOTICE;rm -rf RELEASE-NOTES;rm -rf RUNNING.txt;rm -rf ./bin;rm -rf ./lib

(4) 인스턴스별 server.xml 수정하기

각 인스턴스별로 server.xml를 수정합니다. 여기서 중요한 것은 “하나의 머신”에서
멀티로 인스턴스를 기동하기 때문에 Port가 충돌이 날수 있습니다.

그렇기 때문에 Port설정에 제일 유념해야 합니다.
실무에서는 반드시 각 인스턴스별 Port를 정책적으로 관리 해야 합니다.


Instance1의 sever.xml

1
2
3
4
5
6
7
8
9
10
# vi /home/beyondj2ee/was/apps/instance1/conf/server.xml
--- server.xml -----------------------------------------------
<server port="8005" shutdown="SHUTDOWN">
    .....
    <connector
        connectiontimeout="20000"port="8080"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        redirectport="8443" />
    <connector port="8009" protocol="AJP/1.3" redirectport="8443" />
</server>

Instance2의 sever.xml

1
2
3
4
5
6
7
8
9
10
# vi /home/beyondj2ee/was/apps/instance1/conf/server.xml
--- server.xml -----------------------------------------------
<server port="8105" shutdown="SHUTDOWN">
    .....
    <connector
        connectiontimeout="20000" port="8181"
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        redirectport="81443" />
    <connector port="8109" protocol="AJP/1.3" redirectport="81443" />
</server>
  •  반드시 server 엘리먼트에 shutdown=”SHUTDOWN”이라고 선언 해야 합니다. 실제로 “shutdown”
    명령을 실행하면 위에 선언된 속성의 인스턴스를 찾아서 중지를 하기 때문입니다.
  • server port, http port, ajp port, redirectport 이렇게 4개의 포트를 충돌 없이 선언이 되어야 합니다.

(5) 인스턴스별 기동/중지 쉘 만들기

Instance1의 startup-instance1.sh

1
2
3
4
5
6
7
8
# vi /home/beyondj2ee/was/apps/instance1/startup-instance1.sh
--- startup-instance1.sh -----------------------------------------------
#!/usr/bin/env bash
export CATALINA_BASE=/home/beyondj2ee/was/apps/instance1
export JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
export CATALINA_OPTS="-Denv=product -Denv.servername=instance1"
cd $CATALINA_HOME/bin
./startup.sh
  • “CATALINA_BASE”  환경 변수에 인스턴스1의 홈 디렉토리 경로를 설정 합니다.
  • “JAVA_OPS”, “CATALINA_OPTS” 환경 변수를 서비스 요건에 맞게 설정을 합니다.
  • “Tomat Home” 디렉토리의 “bin” 디렉토리로 이동후 “startup.sh”를 실행 합니다.

Instance1의 shutdown-instance1.sh

1
2
3
4
5
6
# vi /home/beyondj2ee/was/apps/instance1/shutdown-instance1.sh
--- shutdown-instance1.sh -----------------------------------------------
#!/usr/bin/env bash
export CATALINA_BASE=/home/beyondj2ee/was/apps/instance1
cd $CATALINA_HOME/bin
./shutdown.sh
  • “CATALINA_BASE”  환경 변수에 인스턴스1의 홈 디렉토리 경로를 설정 합니다.
  • “Tomat Home” 디렉토리의 “bin” 디렉토리로 이동후 “shutdown.sh”를 실행 합니다.

Instance2의 startup-instance2.sh

1
2
3
4
5
6
7
8
# vi /home/beyondj2ee/was/apps/instance2/startup-instance2.sh
--- startup-instance2.sh -----------------------------------------------
#!/usr/bin/env bash
export CATALINA_BASE=/home/beyondj2ee/was/apps/instance2
export JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
export CATALINA_OPTS="-Denv=product -Denv.servername=instance2"
cd $CATALINA_HOME/bin
./startup.sh

Instance2의 shutdown-instance2.sh

1
2
3
4
5
6
# vi /home/beyondj2ee/was/apps/instance2/shutdown-instance2.sh
--- shutdown-instance2.sh -----------------------------------------------
#!/usr/bin/env bash
export CATALINA_BASE=/home/beyondj2ee/was/apps/instance2
cd $CATALINA_HOME/bin
./shutdown.sh

5. 서버 기동 및 확인

설치 및 설정이 끝났습니다.  확인을 위해서 각 인스턴스별 서버를 “startup“해 보겠습니다.
아래와 같이 각 인스턴스별 “” 스크립트를 실행 합니다.

두개의 브라우져를 열고, 각 인스턴스가 서비스 하는 “port”로 접속 합니다.

5. CONCLUSION

Tomcat Server는 오늘 날  세계적으로 Java WAS로서 제일 많은 사용하고 있습니다. 특히,
Tomcat7“이 출시 되면서 성능, 안정성, 다양한 기능들에 대해서 많은 변화가 있었습니다.

Multiple Tomcat 기동 방법“은 실제로 real 환경에서 종종 사용하는 팁입니다.
하지만 위에서 언급했듯이 “관리 정책“이 없으면, 오히려 더욱 시스템이 복잡해 질수 있습니다.
이점 유념하시면서 유용하게 사용 하셨으면 합니다.

출처 : http://beyondj2ee.wordpress.com/

DB 커넥션 풀이 부족해서 나는 오류.

같은 디비에 17개의 커넥션풀 붙어야되는데, 자꾸 7번째(?)인가 할때 에러가 나서,

SQL-DEVELOPER 로 접속을 해도 똑같은 에러가 나고 접속이안된다.


기존의 17개의 커넥션풀 에서 하나 끊고, 다시  SQL-DEVELOPER 접속하니 접속성공!


일단 ORACLE 설치된 서버에 ROOT 계정으로 접속해서

SQL) SHOW PARAMETER PROCESSES;

하면 PROCESSES 값 나온다.

값을 늘려줘야한다.

SQL) ALTER SYSTEM SET PROCESSES = 200 SCOPE = SPFILE;

SQL) SHUT IMMEDIATE;

SQL) STARTUP;


다시 테스트!

'공부 > ORACLE_ERROR' 카테고리의 다른 글

[ORACLE]_ORA-16038/ORA-19809/ORA-00312 에러 발생 조치  (0) 2012.11.16

EJB란 


 오늘은 첫 번째 강좌로서 EJB에 대한 개념을 정리해 보도록 하겠습니다. 음.. EJB라고 하면 엔터프라이즈 자바 빈(Enterprise Java Bean)이라고 하는 건 다들 아시죠^^  썰렁했나? 그런데 이말가지고는 EJB의 뜻을 해석 하기는 어려우실 건니까 분산환경, RMI등을 이해 한 후 EJB에 대해 알아 보기로 하겠습니다. 


우선 EJB를 보시기 전에 자바 RMI라고 하는것에 대해 알아 보자구요, Java RMI는 Remote Method Invocation의 머리말을 딴 말인데 JDK1.1부터 자바에 내장된 기술입니다. Java 환경에서 Computer 간 또는 Program 간에 통신(객체를 주고 받을 수 있습니다)을 할 수 있는 기능을 제공합니다. 자바에 내장 되었다는 것은 CORBA, DCOM, EJB등은 통신을 대신 해주는 미들웨어(Middleware)가 필요한데(EJB를 사용하기 위해서는 이 사이트에서 강좌가 진행 중인 웹 로직, 웹 스피어등의 미들웨어가 필요하다는 겁니다.),  RMI는 이미 JVM에서 지원을 한다는 이야기죠… 제 생각엔 분산 시스템 환경을 구축하는데 간단한 것이라면 RMI를 추천 합니다.  그리고 미들웨어라는 말이 자주 보이는데 이것은 분산 환경에서 애플리케이션들이 연결되어 서로 데이터를 교환할 수 있게 해 주는 Software정도로 보시면 되겠습니다. 


객체 지향의 개념에서 프로그램이 객체들 간의 메세지 전송으로 실행 된다는 이야기를 많이 보셨을 겁니다. 그런데 만약 그 객체들이 서로 다른 컴퓨터에 존재한다면 어떨까요? 과거 분산 시스템은 서로 다른 프로그램들이 다른 컴퓨터에 존재하고 실행되는 것이었는데 최근의 객체 지향에서는 각 객체가 분산되어 존재하는 개념인 것입니다. 그래서 서로 통신을 하는데 다른 컴퓨터에 있는 객체의 메소드를 호출 한다든지 또는 객체들도 던졌다 받았다 한다는 것이 RMI 입니다. 


분산컴퓨팅, 분산객체에 대한 개념에 대해 정리하면 아래와 같습니다. 물론 Java Network 강좌에 나와 있는 내용 입니다. 


분산 컴퓨팅 이란? 네트워크에서 서로 다른 시스템 간에 응용 프로그램을 분산해서 처리하는 환경을 말합니다. 즉 하나의 컴퓨터에 존재하는 Application이나 프로세스에서 스스로 처리하거나 수행하기 어려운 작업을 다중 프로세서나 컴퓨터에 분산 시키는 것입니다. 분산 컴퓨팅을 적용한 Application을 Distributed Application 이라고 합니다. 

  

분산 객체 (Distributed Object) 란? 분산 컴퓨팅 기술이 객체 지향과 접목되어 하나의 프로세서나 컴퓨터에서 실행되는 객체가 다른 프로세서나 컴퓨터에서 객체와 통신이 가능 하도록 하는 기술이 분산 객체 기술이며 분산 객체란 자신이 존재하는 런타임 환경과는 다른 런타임에 있는 객체와 통신이 가능한 객체 입니다. 


이제 EJB로 돌아와서 개념을 정리해 보죠… EJB는 대규모 분산 객체 시스템을 구축하기 위한 기술 또는 자바로 서버 측  비즈니스 로직을 작성하기 위한 Enterprise 환경에서의 자바 표준이라고 보시면 됩니다. 흔히 프리젠테이션 로직이라고 하는 것이 화면에 보여지게 되는 정보의 타입, 포맷을 자동으로 처리하는 반면 비즈니스 로직은 급여계산 한다든지 하는 보이지 않는 어떤 처리를 하는 겁니다. 만약 EJB를 사용하기 위해 웹로직 서버를 이용한다고 하면 프로그램 개발자는 웹로직 서버의 컨테이너를 이용하여 작업을 하게 되는데 이는 트랜잭션의 지원, 보안, 동시 접근 처리 등 비즈니스 로직을 처리하는데 있어 필요한 모든 것을 제공 한다고 보면 됩니다. EJB는 엔티티빈, 메시지 드리븐 빈, 상태유지 세션 빈, 비상태유지 세션 빈등 4가지의 타입이 있으며 아마도 오라클자바에 오시는 여러 분들은 수준이 높아 공부하시는데 크게 어렵지 않으리라 생각 됩니다. ^^ EJB는 명세, 스펙만 잘아시면 쉽게 공부 할 수 있습니다. 


EJB에 대한 이해를 위해서는 앞서 설명 한 분산 환경, 분산 객체, RMI등을 잘 알고 있어야 합니다. 그래서 RMI의 기초가 부분에 대해 부족하시다고 생각이 드는 분은 Java Network의 RMI강좌중 HelloWorld를 따라해 보시고 오시기를 부탁 드리구요, JSP, Servlet등도 공부를 하시기 바랍니다. 


 EJB기술을 이용하면 다른 곳에 떨어진(원격의) EJB서버 메모리에 떠 있는 클래스를 참조할 수 있습니다. 다시 말씀 드리면 그 클래스의 메소드를 호출 할 수 있다는 이야기 입니다.  즉 EJB도 내부적으로 컴포넌트의 통신을 위해 RMI를 사용 한다는 겁니다. 그리고 분산 환경이라고 무조건 EJB를 쓰시면 큰일 납니다. 미들웨어 구입을 위한 비용은 둘째 치더라도 EJB는 추가적인 overhead가 있으므로 성능 향상을 위한 EJB 보다는 안정성, 재사용 가능한 시스템, 프리젠테이션 영역과 비즈니스 로직의 분리, 신뢰성 있는 N-Tier 환경, 분산 환경이 꼭 필요한가 등을 고려하여 사용 하는 것이 바람 직 합니다. EJB를 사용하기 위해서는 전용 서버(미들웨어)를 사용해야 하는데 SUN에서 제공하는 J2EE서버의 경우 거의 실무에서는 쓰이지 않으며 주로 웹로직, 웹스피어 등을 이용하셔서 개발을 하게 됩니다.

출처 : 오라클자바커뮤니티 (http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecEJB&wr_id=1)


위의 내용은 퍼온글이다.

근데 읽어도, 확실히는 모르겟다. 간단하게 정리해본다. 

(이것도 퍼온글이지만, 위에 글보단 좀 간결해서 보기도 편하고 이해하기도 그나마 쉽다'- ')


- EJB 배경

1. 종래의 어플리케이션 개발시 비지니스로직 뿐만 아니라, 시스템 서비스를 이용한 데이타베이스치리 와 트랙잭션처리

    와 같은 프로그램이 필요로 하기 때문에 모두 개발해야하는 과정에서 시간이 오래 걸렸다.

2. 1번과 같이 각각의 서버 어플리케이션의 시스템서비스가 달라 어플리케이션간의 이동성이 없고, 부품화가 곤란

3. 이 같은 문제를 해결해서, 서버 어플리케이션의 생산성의 향상과 이동성을 실현하기 위해서 생겨난 것이

    EJB(Enterprise Java Bean)이다.



- EJB 

1. Enterprise Java Bean 은 독립한 부품이 아닌, SUN 사가 만든 규약(?)

2. EJB는 서버 어플리케이션의 개발을 용이하게 해 다중다양한  플랫폼과 제품간의 이동성을 실현하기 위하여

    같은 비지니스로직과 시스템서비스를 이용하는 로직을 분산해 그 사이의 규약을 구정한 것.


- EJB 기본구성

1. Enterprise Bean

2. Container

3. EJB Server

4. Client Application

(위 4가지 요소 중 어플레케이션 개발자가 용이한 것은 1, 4 번)


- Enterprise Bean

1. 비지니스 로직 서버 컴포넌트

2. Enterprise Bean 2가지 모델

2-1) Session Bean

클라이언트의 대화처리를 실현하는 오브젝트이다.

2-2) Entity Bean

DataBase 에 격납된 레코드를 오브젝트로 뽑아내거나, 격납하기 위하여 이용하는 오브젝트

※ 일반적으로 클라이언트가 Session Bean을 불러 Enitiy Bean을 불르는 것으로 데이터 베이스에 접근한다.


- Container

1. EJB서버와 Enterprise Bean 의 중간에 위치해, 클라이언트 어플리케이션은 그 컨테이너를 경유해서 Enterprise Bean 

    에 접근한다.

2. 컨테이너가 데이터베이스처리와 트랜잭션처리 등을 숨기기위해 개발자와 그것들을 의미하지 않는 어플리케이션을

    개발하는것이 가능하다.


- EJB Server

1. EJB서버는 컨테이너를 관리하는 EJB로써 필요한 시스템 레벨의 서비스(데이타 베이스 처리, 트랜잭션 처리 등)을

   실현한다.


- Client Application

1. EJB에 준거한 클라이언트 어플리케이션이다.

    (Java Applet, Java Application, Servlet, JavaServer Page(JSP) 베이스의 어플리이션 등이 있다.)

2. Enterprise Bean 기본동작

    클라이언트부터 서버의 Enterprise Bean의 접근은 컨테이너를 경유해서 행한다,

    컨테이너는 Enterprise Bean 의 대리가 되는 EJB 오브젝트와 EJB 오브젝트의 생성/삭제를 행하는 EJB 홈을 의미함.

    클라이언트는 컨테이너가 갖는 이 두가지 오브젝트를 통해서 Enterprise Bean 에 접근한다.

    클라이언트가 컨테너를 통해서 Enterprise Bean 에 접근하는 흐름


    1) JNDI(Java Naming and Directory Interface)의 lookup 메서드에서 EJB home을 검색한다.

    2) 클라이언트가 습득한 EJB HOME 에 대해서 create 또는 find 메소드를 호출하면 컨테이너가 Enterprise Bean의 

        대리 Object 에 있는 EJB Object 를 생선한다.

        이 때, 컨테이너 내부에는 실제로 비지니스 로직이 갖춰져있는 Enteerprise Bean의 인스턴스가 생성된다.

    3) 클라이언트는 Enterprise Bean 의 대리가 되는 EJB Object 의 비지니스 메소드를 호출한다.

        컨테이너가 그것을 중계해서 Enterprise Bean 의 메소드를 호출한다.

- 실행환경

EJB 서비스에는 EJB의 컨테이너라고 하는 개념이 포함되어 있다,

컨테이너는 EJB 어플리케이션을 넣기 위한 용기이다.

개발환경에서 작성된 EJB 어플리케이션은 전개된 후 서버에 전송하는 컨테이너에 설치하는 것에 의해 실행가능한

상태로 된다. EJB 어플리케이션을 전개하는 것을 'Deployment'라고한다(디플로이먼트?)



숫자형 함수란 수 값을 인수로 받아 NUMBER 타입의 값을 반환하는 함수이다.

ABS(n)

ABS 함수는 절대값을 계산하는 함수이다.

1
2
3
4
5
6
-- ABS 예제
SELECT ABS (-1.234) absolute FROM DUAL;
 
ABSOLUTE
----------
     1.234

CEIL(n)

CEIL 함수는 올림값을 반환하는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- CEIL 양수 예제
SELECT CEIL(10.1234) "CEIL" FROM DUAL;
 
CEIL
----------
        11
 
 
 
-- CEIL 음수 예제
SELECT CEIL(-10.1234) "CEIL" FROM DUAL;
 
CEIL
----------
      -10

FLOOR(n)

FLOOR 함수는 버림값을 반환하는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- FLOOR 양수 예제
SELECT FLOOR(10.1234) "FLOOR" FROM DUAL;
 
FLOOR
------
     10
 
 
-- FLOOR 음수 예제
SELECT FLOOR(-10.1234) "FLOOR" FROM DUAL;
 
FLOOR
------
    -11

MOD(m, n)

MOD 함수는 m을 n으로 나눈 나머지를 반환 한다. n이 0일 경우 m을 반환 한다.

1
2
3
4
5
6
-- MOD예제
SELECT MOD(9, 4) "MOD" FROM DUAL ;
 
MOD
----
   1

ROUND(n, [m])

ROUND 함수는 n값의 반올림을 하는 함수로 m은 소숫점 아래 자릿수를 나타낸다.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- ROUND 예제
SELECT ROUND(192.153, 1) "ROUND" FROM DUAL;
 
ROUND
-------
  192.2
 
-- ROUND 예제
SELECT ROUND(192.153, -1) "ROUND" FROM DUAL;
 
ROUND
-------
  190

TRUNC(n, m)

TRUNC 함수는 n값을 절삭하는 함수로 m은 소숫점 아래 자릿수를 나타낸다.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- TRUNC 예제
SELECT TRUNC(7.5597, 2) "TRUNC" FROM DUAL;
 
TRUNC
-----
 7.55
 
-- TRUNC 예제
SELECT TRUNC(789.5597, -2) "TRUNC" FROM DUAL;
 
TRUNC
-----
700

Oracle Number Functions

ABS
ACOS
ASIN
ATAN
ATAN2
BITAND
CEIL
COS
COSH
EXP
FLOOR
LN
LOG
MOD
NANVL
POWER
REMAINDER
ROUND (number)
SIGN
SIN
SINH
SQRT
TAN
TANH
TRUNC (number)
WIDTH_BUCKET


- 출처 : 꿈꾸는 개발자 DBA 커뮤니티 (그루비) http://www.gurubee.net/

윈도우7은 기본적으로 CMD 창에서 Telnet 가 안된다.

설정을 해주어야 한다.

설정법)

설정 -> 제어판 -> 프로그램 -> 왼쪽탭(Windows 기능사용/사용안함) -> 텔넷 서버, 텔넷 클라이언트 체크 후 확인

Tomcat webapps 경로밑에 project_A.war, project_B.war 두개를 풀어서 사용중인데,

B 프로젝트에서 A프로젝트의 properties 파일을 읽어서 사용해야 할 경우가 생겼다.

Request 를 쓰기엔 기존에 해놓은 작업이 많아서 각 메서드 마다 변수로 Request 를 주고..

하기엔 너무 번거로워서... B 에서 Catalina Home 경로 읽어서 바로 타고 올라가게 작업

 

System.getProperty("catalina.home");

로 Catalia Home 경로 읽어서 바로 올라가게 작업 함. 로컬에서는 됐는데.. 서버에 올리면 어찌 될지는 모르겟음'- '

+ Recent posts