728x90
$JEUS_HOME/config/서블릿컨테이너/JEUSMain.xml  속에 다음과 같이 설정을 했다고 하면   여기서 patch 는 가상의 이름이며 실제 존재하는 디렉토리의 이름과 다르다. (예제는 혼란을 피하기 위하여 동일하게 잡았지만)

우리가 웹브라우져에서 http://xxx.xxx.xxx.xxx:port/patch/hello.html 쳤을 때 제우스는 입력된 URL 주소에서  이 patch 라는 단어를 식별해 내고, 환경설정에 미리 지정되어 있는 실제 물리적인 디렉토리인  /tmax/jeus/cbs/webhome/app_home/patch 에서 hello.html 이란 파일을 찾게 된다.

    <application>
        <name>patch</name>
        <path>/tmax/jeus/cbs/webhome/app_home/patch</path>
        <deployment-type>COMPONENT</deployment-type>
        <web-component/>
        <deployment-target>
            <target>
                <engine-container-name>cbssvd01_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <classloading>ISOLATED</classloading>
        <auto-deploy/>
    </application>

와 같이 설정했다면  /tmax/jeus/cbs/webhome/app_home/patch 디렉토리에  hello.html 파일을 다음과 같이 만든다.

 [cbssvd01@e9812978:/tmax/jeus/cbs/webhome/app_home/patch]ll hello.html
-rw-rw-rw-   1 e9812978 cbsdev            7  7월 21일 16:25 hello.html
[cbssvd01@e9812978:/tmax/jeus/cbs/webhome/app_home/patch]cat hello.html
hello!
[cbssvd01@e9812978:/tmax/jeus/cbs/webhome/app_home/patch]

웹에서 불러 보면 잘 불려지는데...


사용자 삽입 이미지

728x90

[proframe@dev03:/userdir/proframe/proframe4.0/logging/dbio]$ proc

Pro*C/C++: Release 10.2.0.2.0 - Production on 화 2월 27 09:44:42 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

시스템 기본 옵션 값이 가지고 온 곳: /oracle/app/oracle10g/product/1020/precomp/admin/pcscfg.cfg

옵션 이름      현재 값        기술
-------------------------------------------------------------------------------
auto_connect   아니오          ops$ 계정으로 자동 연결할 수 있도록 합니다
char_map       charz          문자 배열과 문자열을 대응합니다
close_on_commit아니오          COMMIT에 모든 커서를 닫습니다
cmax           100            접속 풀에 대한 CMAX 값
cmin           2              접속 풀에 대한 CMIN 값
cincr          1              접속 풀에 대한 CINCR 값
ctimeout       0              접속 풀에 대한 CTIMEOUT 값
cnowait        0              접속 풀에 대한 CNOWAIT 값
code           kr_c           생성될 코드 유형
comp_charset   multi_byte     C 컴파일러가 지원하는 문자 집합 유형
config         default        다른 파일로 시스템 구성 파일 무효화
cpool          아니오          접속 풀링 지원
cpp_suffix     *none*         기본 C++ 파일 이름 접미어 무효화
dbms           native         v6/v7/v8 호환성 모드
def_sqlcode    아니오         '#define SQLCODE sqlca.sqlcode' 매크로 생성
define         _LONG_LONG     선행 프로세서 기호 정의
               _IBM_C
               __64BIT__
               *none*
duration       transaction    캐시에 있는 객체에 대한 핀 기간 설정
dynamic        oracle         Oracle 또는 ANSI 동적 SQL 의미 지정
errors         예             오류 메시지가 터미널에 전송될지 여부
errtype        *none*         intype 파일 오류에 대한 목록 파일 이름
events         아니오          등록/가입 이벤트 통지가 지원됩니다.
fips           none           ANSI 비호환 사용의 FIPS 플래그 처리
header         *none*         이전에 컴파일된 헤더에 대한 파일 확장자 지정
hold_cursor    아니오          커서 캐시에서 커서 유지 제어
iname          *none*         입력 파일 이름
include        *none*         포함된 파일에 대한 디렉토리 경로
intype         *none*         유형 정보에 대한 입력 파일 이름
lines          아니오          생성된 코드에 #line 지시어 추가
lname          *none*         기본 목록 파일 이름 무효화
ltype          short          목록 파일에 생성된 데이터 양
maxliteral     1024           생성된 문자열 리터럴의 최대 길이
maxopencursors 10             캐시에 저장된 열린 커서의 최대 수
mode           oracle         Oracle 또는 ANSI 규칙에 대한 코드 일치
native_types   아니오          고유 float/double에 대한 지원
nls_char       *none*         국가별 언어 문자 변수 지정
nls_local      아니오          NLS 문자 의미가 수행되는 방법 제어
objects        예             객체 유형 지원
oname          *none*         출력 파일 이름
oraca          아니오          ORACA 사용 제어
pagelen        80             목록 파일의 페이지 길이
parse          full           비SQL 코드의 구문 분석 제어
prefetch       1              커서 OPEN 시 미리 인출된 행 수
release_cursor 아니오          커서 캐시에서 커서 해제 제어
select_error   예             선택 오류의 플래그 제어
sqlcheck       syntax         SQL 확인 시 컴파일 시간의 양
sys_include    /usr/include   시스템 헤더 파일이 있는 디렉토리
threads        아니오          다중 스레드 응용 프로그램을 나타냄
type_code      oracle         동적 SQL에 대한 Oracle 또는 ANSI 유형 사용
unsafe_null    아니오          지시자 변수 없이 널 인출 허용
userid         *none*         사용자 이름/암호 [@dbname] 접속 문자열
utf16_charset  nchar_charset  UTF16 변수에 의해 사용된 문자 집합 형식
varchar        아니오          암시적 varchar 구조 사용 허용
version        recent         반환될 객체의 버전
PCC-F-02135, CMD-LINE:  사용자가 도움을 요청했습니다
[proframe@dev03:/userdir/proframe/proframe4.0/logging/dbio]$


이것을 영문으로 다시 보면

[cbssvd01@e9812978:/logs/proframe/cbs/dbio_log]proc

Pro*C/C++: Release 10.2.0.3.0 - Production on Wed Jul 2 18:24:14 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /oracle/app/oracle/product/10.2.0/precomp/admin/pcscfg.cfg

Option Name    Current Value  Description
-------------------------------------------------------------------------------
auto_connect   no             Allow automatic connection to ops$ account
char_map       charz          Mapping of character arrays and strings
close_on_commitno             Close all cursors on COMMIT
cmax           100            CMAX Value for connection pool
cmin           2              CMIN Value for connection pool
cincr          1              CINCR Value for connection pool
ctimeout       0              CTIMEOUT Value for connection pool
cnowait        0              CNOWAIT Value for connection pool
code           kr_c           The type of code to be generated
comp_charset   multi_byte     The character set type the C compiler supports
config         default        Override system configuration file with another
cpool          no             Support connection pooling
cpp_suffix     *none*         Override the default C++ filename suffix
dbms           native         v6/v7/v8 compatibility mode
def_sqlcode    no             Generate '#define SQLCODE sqlca.sqlcode' macro
define         _LONG_LONG     Define a preprocessor symbol
               _IBM_C
               __64BIT__
               *none*
duration       transaction    Set pin duration for objects in the cache
dynamic        oracle         Specify Oracle or ANSI Dynamic SQL Semantics
errors         yes            Whether error messages are sent to the terminal
errtype        *none*         Name of the list file for intype file errors
events         no             Support publish-subscribe event notifications
fips           none           FIPS flagging of ANSI noncompliant usage
header         *none*         Specify file extension for Precompiled Headers
hold_cursor    no             Control holding of cursors in the cursor cache
iname          *none*         The name of the input file
include        *none*         Directory paths for included files
intype         *none*         The name of the input file for type information
lines          no             Add #line directives to the generated code
lname          *none*         Override default list file name
ltype          short          The amount of data generated in the list file
maxliteral     1024           Maximum length of a generated string literal
maxopencursors 10             Maximum number of cached open cursors
mode           oracle         Code conformance to Oracle or ANSI rules
native_types   no             Support for native float/double
nls_char       *none*         Specify National Language character variables
nls_local      no             Control how NLS character semantics are done
objects        yes            Support object types
oname          *none*         The name of the output file
oraca          no             Control the use of the ORACA
pagelen        80             The page length of the list file
parse          full           Control which non-SQL code is parsed
prefetch       1              Number of rows pre-fetched at cursor OPEN time
release_cursor no             Control release of cursors from cursor cache
select_error   yes            Control flagging of select errors
sqlcheck       syntax         Amount of compile-time SQL checking
sys_include    /usr/include   Directory where system header files are found
threads        no             Indicates a multi-threaded application
type_code      oracle         Use Oracle or ANSI type codes for Dynamic SQL
unsafe_null    no             Allow a NULL fetch without indicator variable
userid         *none*         A username/password [@dbname] connect string
utf16_charset  nchar_charset  The character set form used by UTF16 variables
varchar        no             Allow the use of implicit varchar structures
version        recent         Which version of an object is to be returned
PCC-F-02135, CMD-LINE:  User asked for help
[cbssvd01@e9812978:/logs/proframe/cbs/dbio_log]



실제 컴파일 되는 모양을 본다면

proc lines=YES mode=ORACLE dbms=V8 unsafe_null=YES hold_cursor=YES             code=ANSI_C ltype=NONE define=DEBUG define=ORA_PROC define=PDB_TRACE define=GLOBALCB define=FRAME_DEV include=/tmax/proframe/cbs/pfm/inc include=/tmax/proframe/
cbs/release/dbio/inc include=/tmax/proframe/cbs/release/pmap/inc         include=/tmax/tmax/cbs include=/tmax/tmax/cbs/usrinc   include=/oracle/app/oracle/product/10.2.0/precomp/public  include=/oracle/app/oracle/product/10.2.0/rdbms/public  include=/tmax/npfm2/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/dbio/inc  include=/tmax/npfm2/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel
/pmap/inc  -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/public   sqlcheck=SYNTAX iname=pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000_1_03.pc oname=pfmDbioAFTS_TRMS_PRG
R_FILE_PTCL_PS0000.c

Pro*C/C++: Release 10.2.0.3.0 - Production on Wed Jul 2 17:36:43 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /oracle/app/oracle/product/10.2.0/precomp/admin/pcscfg.cfg

>>> to compile c file
cc -q64 -btl -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE -DTCACHE_ON -DGLOBALCB -DAUTOFREECB -DTRACE -DDEBUG -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/
dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc     -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/prof
rame/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/p
ublic     -c pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000.c

"pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000_1_03.pc", line 208.16: 1506-304 (I) No function prototype given for "func".

뭐 이렇게 되겠죠. 먼저 ~.pc 프로그램을 proc 컴파일러를 이용하여 ~.c 로 만든다음 다시  cc 컴파일러로 ~.c 를 ~.o 로 컴파일 하게 됩니다. 물론 이 ~.o 를 ~.a 나 ~.so, ~.sl 로 묶으려면  cc 를 한번 더 돌려야 하겠지요..

-----> 4. Compile entry-function source and link object files
    cc -q64 -btl        -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE       -DTCACHE_ON        -DGLOBALCB         -DAUTOFREECB       -DTRACE            -DDEBUG
     -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER    -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/
dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc     -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/prof
rame/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/p
ublic     -c pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c
"pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c", line 34.16: 1506-304 (I) No function prototype given for "func".
    /sw/openmcm/bin/McmMBL /sw/openmcm/config/mcm_mbl.opt pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c cc -q64 -btl        -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE       -DTC
ACHE_ON        -DGLOBALCB         -DAUTOFREECB       -DTRACE            -DDEBUG              -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER    -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product
/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc
 -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/proframe/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/ora
cle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/public     -c
    cc -G -bshared -q64 -o libpfmDbioAFTS_TRMS_PRGR_FILE_PTCL.so  pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PD0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PF0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PI0000.o pfmDbioAFTS_TRMS_PR
GR_FILE_PTCL_PS0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PU0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.o  -G -bshared -q64 -qlanglvl=extc99 -brtl  -L/tmax/proframe/cbs/pfm/lib     -L/tmax/proframe/cbs/release/lib  -L
/tmax/proframe/cbs/release/pmap/lib    -L/tmax/proframe/cbs/release/dbio/lib -L/tmax/tmax/cbs/lib64 -L/oracle/app/oracle/product/10.2.0/lib   -L/sw/openmcm/lib -lMcmMblTM -lMcmMatTP
목표 "all"은(는) 최근의 것입니다.
>>> [make] DBIO library linked 5 out of 5 modules successfully.

출처 : http://pangate.com/99

728x90

프로프레임에서 다른 사람이 나의 프로그램을 OPEN 해서 보다가 실수로 저장해 버리는 것을 막을 방법이 없는 것인가?

과거에 프로프레임 스튜디오에는 체크인/체크아웃 기능이 있었다. 그러나 패치 34 부터인가 HOLD 기능이 나오기 시작하였고 이 체크인/체크아웃 기능과 hold 기능을 프로젝트별로 선택하여 사용하도록 가이드되고 있다. 이 두가지 기능을 동시에 사용할 수 있다면 금상첨화겠으나 하나만 사용해야 하는 제약이 있다. 

1. 체크인/체크아웃기능 ( CHECK IN / CHECK OUT )

메뉴에서 체크아웃을 선택하면 해당 프로그램은 체크아웃 시킨 사람만 수정이 가능하다. 같은 그룹에 있는 팀원이라도 수정이 불가능하게 된다. 다시 체크인 한 후에는 같은 그룹내의 팀원까지만 수정이 가능하게 된다.

2. 홀드(HOLD) 기능

누군가가 프로그램을 OPEN 하면 자동적으로 편집  LOCK 이 걸리게 된다. 다시 OPEN한 프로그램을 닫으면 자동적으로 이 LOCK 이 해제된다.

3. 대책 (피해가는 방법)

이 두가지 기능은 상호 배타적으로 사용될 수 없음에도 불구하고 배타적으로 사용하도록 개발되어 있다. 이것은 별개의 기능이기 때문에 동시에 지원되어야 하는 기능이 상식이나 티맥스 연구소에서 아직은 경황이 없어서 여기까지는 지원이 안 되는 모양이다.

체크인/체크아웃을 기본 LOCK 정책으로 채택한 프로젝트에서는 자기소유의 모든 프로그램은 미리  체크아웃을 시켜 놓아 버리는 것이 안전하다.
만약 프로젝트에서 HOLD 기능을 기본 LOCK 정책으로 채택하고 있다면 다음의 꼼수를 이용하는 것을 추천한다. 퇴근할 때나 중간에 수시로 다음의 SQL을 돌려 준다면 자동적으로 LOCK 이 걸리게 되어 OWNER 만이 프로그램을 수정할 수 있도록 편집 LOCK 이 걸리게 되므로 프로그램을 OPEN 해서 보다가 본의아니게 실수로 프로그램을 수정한 후 저장해 버리는 경우를 예방할 수 있다.

INSERT INTO DEV_LOCK_STATUS
SELECT RESOURCE_ID, OWNER, 'Y', '', SYSDATE
FROM DEV_RESOURCE
WHERE
OWNER IN ('9812978','9812087') -- 이부분을 빼면 모든 프로그램이 대상이 되겠죠.
AND RESOURCE_TYPE IN ('PERSIST', 'VIEW', 'EXECSQL', 'DYNAMICSQL' ,
                      'BIZ_MODULE', 'SERVICE_MODULE', 'BATCH_MODULE',
                      'STRUCTURE' );

COMMIT;


LOCK 이 정상적으로 걸린 경우 네비게이터의 아이콘에 자물쇠모양이 붙게 된다.

사용자 삽입 이미지












출처 : http://pangate.com/98

+ Recent posts