본문 바로가기

IT/Java17

JVM Error file(crash report) 자바 어플리케이션에 문제가 있어 아무 말 없이 종료되버리면 개발자 입장에선 난감하기 그지없다. 오류라도 뿜어주면 고맙겠지만, 아무도 오류메시지를 보지 못했다면 어디서 그의 죽음에 관한 정보를 얻을 수 있을것이며, 그 오류는 어떻게 찾아 고쳐야 할까? 다행히 JVM은 자바 어플리케이션에서 심각한 오류나, 예상하지 못한 오류를 발견 했을때는 자동적으로 STDOUT에 dying message 를 남기고, 어플리케이션의 실행위치에 error report 파일을 작성한다는데... 진짜 그런지 한번 보자. 아래는 강제로 에러를 발생시키는 자바 어플리케이션이다. public class ForceDump { public static void main( String[] args ) throws Exception { ja.. 2011. 7. 28.
[iBATIS 2.x] insert 성공 여부 판단 1. insert 전에는 추가할 레코드의 기본키가 무엇이 될 지 모르는 경우 selectKey 를 이용해 추가된 레코드의 기본키를 반환 받아 확인한다. iBATIS 2.x 의 insert 메서드는 selectKey 와 함께 쓰일 경우 기본키 객체에 추가된 레코드의 기본키를 넣어 반환한다. ProductDao.java public class ProductDao { SqlMapClient sqlMapClient; public boolean insertProduct(Product product) { Integer id = (Integer) sqlMapClient.insert(“insertProduct”, product); return id > 0; // product.productId 에도 같은 값이 저장됨 .. 2010. 11. 18.
[iBATIS 2.x] 트랜잭션 동시성 문제 있을까? A, B 두개의 작업이 있다. 두 작업은 같은 SqlMapClient 객체를 통해 DB에 엑세스 한다. A 는 10000개의 insert를 일괄처리하고, B 는 1개의 insert를 처리하는데, 만일 A가 트랜잭션중일때 B가 실행되어 예외가 발생한다면 A 작업이 롤백 될까? 다음은 테스트코드다. import iMonES.Daemon.Main.CiMonESMain; import java.sql.SQLException; import com.ibatis.sqlmap.client.SqlMapClient; import common.manager.DBConnection; public class Test { private SqlMapClient sqlMapClient = DBConnection.getSqlMapCli.. 2010. 11. 16.
[iBATIS 2.x] 일괄처리, 트랜잭션 성능 iBATIS 2.x 는 대량의 insert, update, delete 작업을 효율적으로 처리 할 수 있는 방법으로 startBatch(), executeBatch() 메서드를 제공한다. 개발자 가이드에 의하면 네트워크 트래픽 최소화, JDBC 드라이버의 추가적인 최적화(압축같은) 같은 혜택을 통해 성능향상을 볼 수 있다고 한다. startBatch(), executeBatch() 메서드는 문서상으로 명시적 transaction 과 함께 사용해야 한다고 나오지는 않았으나 테스트시에는 명시적 transaction 을 사용하지 않았을때는 일반작업과 동일하거나 나쁜 결과를 보였다. 1. 특징 UPDATE 문 1000번 반복 처리 속도 테스트 결과 1) 배치+트랜잭션 : 77ms 2) 트랜잭션 : 1104ms .. 2010. 11. 11.