Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Java
- xlet
- RSA
- IPTV
- sha1
- PKCS#8
- Executor
- 자바 암호화
- ACAP
- 자바
- ORM
- String
- 한글조사처리
- 암호학
- JCE
- mac
- Instrumentation
- Runnable
- Executors
- Postman
- date
- 한글조사
- PKCS
- StringUtils
- Freemaker
- AES
- DAMO
- 이클립스 플러그인 개발
- Callable
- Log4J
Archives
- Today
- Total
오늘은 어디로 갈까...
백수 1일째 본문
오늘부터 본격적인 백수의 길로 접어들었다. 생존하기 위해서는 하루 빨리 이 길을 벗어나야하겠지만, 뭐 가끔 쉬어가는것도 좋은 일이니, 열심히 놀아보도록 하자.
DAMO에 EL을 추가한것은 무덤을 파는 일이었다. 너무 자유로운 표현이 가능해서 제어가 불가능한 사태에 빠져버린것이다. 할 수 없이, 여러 제약 조건을둬서 어찌 돌아가게는 했지만, 영 아니올시다. ^^; 그중에서 가장 큰 문제는 반복문이었다.
<select id="getEmpListWithForEach"> SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP <dynamic prepend=" WHERE " > <forEach var='empNo' items='${empNoList}' prepend="EMPNO IN " open="(" close=")" conjunction=", ">${empNo}</forEach> </dynamic> </select>
EL 도입후 forEach 문으로 사용을 하려 했는데, 문제는 var='empNo' 였다. 즉 forEach문 안에서만 유효한 변수가 필요하게 된것이다. 기존에는 파라메터 객체에서만 값을 가져와도 충분했는데, 이렇게 선언하므로해서 지역 변수를 처리할 필요가 생긴것이다. EL이 아니었다면 편법으로 empNoList[]로 파라메터 이름을 바꾸어서 사용할수 있지만, 자유분방한 EL 이기에 저 안에 뭐가 들어갈지 알수가 없다. --; 현재 DAMO의 구조는 쿼리를 실행할때 해당 파라메터 정보를 가지고 파라메터 객체에서 값을 읽어와서 바인딩하고 있는데, 마땅히 처리할 방법이 없다. 쿼리 실행시 StatementContext를 만든 다음, 바인딩할 파라메터 값들을 넣고 사용할까도 해봤지만, 이것도 현 구조에서는 별로 바람직한 방법은 아닌거 같다. 구조를 전면 개편해야하나 ==;
현재는 Minor Update 중이라고 본인을 세뇌시키면서, 다행히 전면 개편은 피할 수 있었지만, 영 찜찜하다. 단일 forEach만 허용하는 한도에서 파라메터 객체를 랩핑해서 사용함으로서 어떻게든 돌아가게는 만들었지만, 이건 아닌거겠지. 현실과의 타협으로 이상한 코드가 만들어지는것을 보면 가슴이 아프다.... ㅠㅠ
아래는 다행히(?) 돌아가는 코드이다.
Map param = new HashMap(); Short[] empNoList = {7369, 7521, 7782}; param.put("empNoList", empNoList); Query query = queryLoader.getQuery("getEmpListWithForEach"); PersistenceManager pm = PersistenceManager.getPersistenceManager(); List<LinkedHashMap> list = pm.getList(query, param, LinkedHashMap.class); for (Map m : list) { System.out.println(m); }
* 실행결과
[17:13:01.312] DEBUG PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:87) - Executing oracle.jdbc.driver.T4CPreparedStatement@a31e1b /* getEmpListWithForEach */ SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP WHERE EMPNO IN (?, ?, ?) [1] 7369 [2] 7521 [3] 7782 {empno=7369, ename=SMITH, job=CLERK, mgr=7902, hiredate=Wed Dec 17 00:00:00 KST 1980, sal=800, comm=null, deptno=20} {empno=7521, ename=WARD, job=SALESMAN, mgr=7698, hiredate=Sun Feb 22 00:00:00 KST 1981, sal=1250, comm=500, deptno=30} {empno=7782, ename=CLARK, job=MANAGER, mgr=7839, hiredate=Thu Jul 09 00:00:00 KST 1981, sal=2450, comm=null, deptno=10}forEach문을 저런 용도가 아닌 다른 용도로 사용할 일이 있을까...?