Anyframe 관련 질문 몇가지 입니다.
Submitted by jdal.lee on 목, 07/17/2008 - 11:02
질문 몇가지 드립니다.
1. logging을 DB에 저장할 때 테이블 스키마가 제공 되는가 아니면 사용자가 임의로 만들어 사용하는가?
2. properties 서비스에서 특수 문자 처리가 가능한가?
3. TableIdGeneration 서비스 시 여러 사람이 동시에 쓸 경우 Unique한 ID 생성에 문제가 없는가?
4. ORACLE Job 스케쥴러 실행할 수 있는 Anyframe 기능이 있나?
5. Query Service에서 ORACLE Stored Procedure를 직접 사용할 수 있나? BEGIN … END
6. Anyframe API 주석있는 버전이 있는가?
이상입니다. 즐거운 하루 되세요


답변입니다.
안녕하세요.
아래 각 항목별 답변을 작성하였습니다.
1. logging을 DB에 저장할 때 테이블 스키마가 제공 되는가 아니면 사용자가 임의로 만들어 사용하는가?
-> DB 테이블에 대해 정해진 스키마가 제공되지 않습니다.
사용자가 임의로 테이블을 만들고, log4j.xml 파일 내에 아래와 같이 JDBCAppender를 추가하여
사용하시면 됩니다.
(log4j.xml 예시)
--------------------------------------------------------------------
<appender name="db" class="org.apache.log4j.jdbc.JDBCAppender">
<!-- JDBC Driver를 정의하기 위한 parameter -->
<param name="Driver" value="oracle.jdbc.driver.OracleDriver"/>
<!-- DB URL을 정의하기 위한 parameter -->
<param name="URL" value="jdbc:oracle:thin:@localhost:1521:ora10"/>
<!-- DB User를 정의하기 위한 parameter -->
<param name="User" value="anyframe"/>
<!-- DB Password를 정의하기 위한 parameter -->
<param name="Password" value="anyframe"/>
<!-- 로그를 남길때 수행할 쿼리를 정의하기 위한 parameter -->
<param name="Sql" value="insert into ANYFRAME_LOG (msg) values('%d %p [%c] - <%m>%n')"/>
</appender>
--------------------------------------------------------------------
자세한 내용은 Anyframe Core 매뉴얼의 Logging Service 부분 중 JDBCAppender를 참고하세요.
2. properties 서비스에서 특수 문자 처리가 가능한가?
-> 네, 처리 가능합니다.
xxx.properties 파일에 아래와 같이 특수 문자에 대해 정의한 후 Properties 서비스를 이용하여
정상적으로 출력되는 것을 확인하였습니다.
----------------------------------
# Special Characters
special.test=~!@#$%^&*()_+;{}|
special.test.sign=£€☎㉿★≠¥→
----------------------------------
3. TableIdGeneration 서비스 시 여러 사람이 동시에 쓸 경우 Unique한 ID 생성에 문제가 없는가?
-> 네, 현재 코드 상으로 신규 ID 생성시 Synchronized Block이 설정되어있습니다.
동시 접속시 Sequencial 하게 처리되므로 해당 이슈는 없으리라 생각합니다.
단지 Synchronized 처리로 인해 성능의 이슈가 있을 수 있는데 이 또한 매번 DB 접속을 하는 형태가
아니고 Block 처리와 같이 Range값을 가지고 처리하는 형태로 설정하면 해소 가능합니다.
4. ORACLE Job 스케쥴러 실행할 수 있는 Anyframe 기능이 있나?
-> 현재 Anyframe은 특정 벤더 제품에 종속적으로 기능을 구현하고 있지 않습니다.
그러나 ORACLE Job 스커쥴러를 원격으로 호출하여 실행시켜주기 위해 어플리케이션에서 어떠한 작업이
필요한지 알려주시면, Anyframe 기반 위에서 어플리케이션 해당 모듈을 어떻게 개발해야 하는지
방안을 제시해드릴 수 있도록 하겠습니다.
5. Query Service에서 ORACLE Stored Procedure를 직접 사용할 수 있나? BEGIN … END
-> 네, QueryService의 메소드를 이용하여 사용하실 수 있습니다.
IQueryService API -> public Map execute(String queryId, Map values)
사용 방법은 다음과 같습니다.
------ SQL Mapping XML File 예 ---------------------------------
<query id="callSP" isDynamic="false">
<statement>
{call test_procedure(?,?)}
</statement>
<param type="NUMERIC" binding="IN" name="in_Val" />
<param type="NUMERIC" binding="OUT" name="out_Val" />
</query>
------ TestCase 예 ---------------------------------------------
public void testCallableStatement_Procedure() {
try {
HashMap inVal = new HashMap();
inVal.put("in_Val", new Integer(1));
Map results = qs.execute("callSP", inVal);
System.out.println("rtVal Class: " + results.get("out_Val").getClass());
BigDecimal rtVal = (BigDecimal) results.get("out_Val");
System.out.println("rtVal : " + results.get("out_Val"));
assertTrue(results.get("out_Val") == 1);
} catch (Exception e) {
e.printStackTrace();
fail("fail to execute procedure.");
}
}
6. Anyframe API 주석있는 버전이 있는가?
-> 현재 Anyframe에서 제공하는 중요 기능(Class, Method) 에 대해서는 주석이 모두 제공되어 있습니다.
유틸성 클래스들 중 일부 클래스에 대해서는 주석이 달려있지 않을 수 있습니다.
어떤 부분에 대한 주석이 필요하신지 알려주시면 반영하도록 하겠습니다.
위 사항 중 의문사항이 생기는 부분이 있으면 알려주세요.
감사합니다.
5번 문의에 대한 추가 질문입니다.
바쁘신가운데 친절한 답변 감사드립니다.
의문점이 남아서 다시 문의 드립니다.
SP를 호출하는 방법은 Anyframe Core 자료에 나와 있어서 참고하고 있습니다.
제가 문의 드릴려고 했던 5번의 SP 사용은
QueryXml 파일에서 SP 호출하는 방법이 아닌 QueryXml 파일에 직접 SP 문법을 사용하여 작성할 수 있는지 여부 입니다.
답변 주시면 감사하겠습니다.
5번 문의 추가 답변입니다.
Query mapping XML 파일 내에 SP 문법을 직접 작성하여 사용하는 방식은 현재
지원하고 있지 않습니다.
프로시저는 *.sql 파일로 작성하여 DB에 실행시켜놓고, Query mapping XML 파일에서는 해당 프로시져를
호출하는 방식을 제공하고 있습니다.
감사합니다.