영향도 분석 환경설정
1. 기본 설정
데이터 소스 설정
설정 파일 위치: <<$BXM_HOME>>/admin/bxmAdmin/WEB-INF/classes/datasource.properties
-- Oracle
driver-classname=oracle.jdbc.OracleDriver
uri=jdbc:oracle:thin:@<<DBUrl>>:<<DBPort>>:<<SID>>
username=<<DBUserName>>
password=<<DBPassword>>
-- MySql
driver-classname=com.mysql.jdbc.Driver
uri=jdbc:mysql://<<DBurl>>:<<DBPort>>/<<database>>
username=<<dbUserName>>
password=<<dbPassword>>
BXM Web Admin이 사용하는 데이터 소스를 설정한다.
실행 쉘 설정
실행 파일 위치: <<$BXM_HOME>>/admin/bin/all_analyze.sh
#!/bin/bash
# set classpath
BXM_HOME=$BXM_HOME (1)
CLASSPATH=$BXM_HOME/admin/bxmAdmin/WEB-INF/classes
APP_HOME=$BXM_HOME/admin/bin/targets (2)
JAVA_BIN=$JAVA_HOME/bin/java
for f in `find $BXM_HOME/admin/bxmAdmin/WEB-INF/lib -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/bxm -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/deps -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/ext -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/jta -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
OPT="-Xms512m -Xmx1024m -classpath $CLASSPATH "
for appName in $APP_HOME/*
do
FILE_NAME=$(basename $appName)
RET= $JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $appName false 2>&1 > $FILE_NAME.log
RET=$?
echo "$appName analyze finished with [$RET]"
done
#$JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $APP_HOME false AnalyzeResources
exit 0
| 1 | BXM_HOME=${BXM_HOME}
환경 변수로 설정된 BXM_HOME을 읽어온다. |
||||
| 2 | APP_HOME=$BXM_HOME/admin/bin/targets
$BXM_HOME/admin/bin 하위에 분석할 프로젝트의 상위 디렉토리를 targets 심볼릭 링크로 지정한다.
|
BXM Config 설정
BXM Web Admin의 "Admin 설정"에서 다음 값들을 확인하고 필요시 수정한다.
| 키 | 샘플(기본) 값 | 설명 |
|---|---|---|
bxm.admin.dni.include.callee |
bxm.web.admin.online.* |
Caller, |
bxm.admin.dni.exclude.callee |
Na |
Caller, Callee 관계를 분석할때 제외할 |
bxm.admin.dni.service. executor.name |
DefaultServiceExecutor |
service |
bxm.admin.dni.service. executor.info.class |
bxm.app.analyze.meta.visiter. DftServiceExecutorMethod |
service executor가 custom되어 가지고 있는 meta정보가 |
bxm.admin.dni.dynamic.query.dft.rule |
bxm.app.analyze.meta.query. |
*.dbio 파일에서 SQL 파싱할 때, Dynamic SQL에서 |
bxm.admin.dni.omm.method.analyze |
false |
omm타입 메소드 분석 여부를 설정한다. |
bxm.servlet.dni.auto.analyze |
true |
실시간 분석 사용 여부를 설정한다. |
2. 옵션 설정
bxm.admin.dni.dynamic.query.dft.rule설정
* SQL Parser를 위해 태그를 없애는 옵션이며, 태그를 없앤 후 올바른 SQL이 아니면 SQL 분석 에러가 날 수 있음을 숙지한다. (SQL 분석이 정상종료되지 않은 경우, 해당 SQL ID의 테이블 명은 #ERROR로 저장된다.)
-
설정 방법
key=value 형태로 입력한다. key는 admin.dni.dynamic.query.dft.rule이고, value는 Dynamic SQL의 태그를 걸러내는 Rule Class의 Full Qualified Name을 입력한다. 2개 이상일 경우 CSV(,)로 구분한다.
-
기본 클래스 설명
-
DftRemoveTag
if, choose, when, otherwise 태그에 해당된다. 아래와 같이 태그만 제거해서 SQL Parsing이 정상동작하게 한다.
select emp_no from EMP_TST where 1=1 < if test="empDept != null && empDept != ''" > and emp_dept = #{empDept} </if> ↓ select emp_no from EMP_TST where 1=1 and emp_dept = #{empDept} -
DftRemoveTagRange
selectKey, bind 태그에 해당된다. 아래와 같이 태그로 묶인 범위를 제거해서 SQL Parsing이 정삭동작하게 한다.
<selectKey keyProperty="id" resultType="int" order="BEFORE"> select SEQ_ID.nexyval FROM DUAL </selectKey> insert into Students (id, name , email) values (#{id}, #{name}, #{email}) ↓ insert into Students (id, name , email) values (#{id}, #{name}, #{email}) -
DftReplaceTag
where, set 태그에 해당된다. where 태그는 WHERE 1=1로, set 태그는 SET으로 치환해 SQL Parsing이 정상동작하게 한다.
select emp_nm from emp_tst <where> <if> and emp_no = #{empNo}</if> </where> ↓ select emp_nm from emp_tst WHERE 1=1 <if> and emp_no = #{empNo}</if> -
DftReplaceTagRange
foreach 태그에 해당된다. foreach로 묶인 범위를 NULL로 치환해 SQL Parsing이 정상동작하게 한다.
SELECT emp_nm FROM emp_tst WHERE emp_dept in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> ↓ SELECT * FROM emp_tst WHERE emp_dept in NULL
-