반응형

컴퓨터활용/자바 23

ORA-00604 나 ORA-01000 오류가 날 때

java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다ORA-01000: 최대 열기 커서 수를 초과했습니다 위와 같은 오류가 날 때는 Statement 나 ResultSet 을 open 하기만 하고 close 가 없어서 나는 오류 입니다. 특히 while, for 같은 루프문에서 적절한 위치에서 close 를 하고 있는 지 확인할 필요가 있습니다. 아래와 같은 샘플 코드가 있다고 했을 때 rsColumns.close(); 를 누락시켰을 때 위와 같은 오류가 발생되었다. 실제 코드는 while loop 가 길어서 ResultSet 닫는 것을 놓쳐도 눈에 잘 띄지 않아서 오류를 찾는데 어려움이 있었다. ResultSet rsTables = dbMeta.get..

JVM Garbage Collection 순간 포착

자바머신에서는 일정시간이 지나면 GC(Grabage Collection)라는 작업을 해 준다. 개발자로서는 일일이 메모리를 해제하지 않아도 된다는 생각에 마음껏 오브젝트를 생성해서 사용하겠지만 이정도의 출렁임임을 안다면 경계해야 할 것이다. 그래프에서 보듯이 이 순간에 시스템의 성능이 현저히 떨어지는 현상을 경험하게 된다. (거의 50%로 떨어짐) 안정적인 거래가 보장되어야 하는 금융거래에서 이런 출렁임은 정말 끔찍한 경우가 될 것이다. JVM 을 띄울 때 heap memory를 충분히 잡아 준다하더라도 이런 출렁임의 시간간격을 줄일 수 있을 뿐이다. heap메모리가 적을 경우 이런 멈칫 하는 출렁임을 더 자주 경험하게 되는 것이다. 이런 GC 작동은 예측할 수 없는 순간에 갑자기 찾아온다는 것이 치명적..

java 문자열 처리

C에서는 strcpy 를 쓰면 간단히 해결될 일을 java 에서는 아주 어렵게 해결한다. 아직 자바가 익숙하지 않아서 인가?일단 String 은 char 의 배열이 아니라 객체 이므로 C 에서 처리 한글자를 지정해서 바꿀 수 없다. toCharArray() 메소드를 통해서 char[]로 변환한 다음에라야 C에서처럼 한글자를 바꾸거나 할 수 있다. 아래 로직은 매번 째 숫자에 정해진 가중치를 곱한 후 누적 합한 다음에 10으로 나눈 나머지를 구하여 체크디지트를 한자리 만드는 로직이다. class test { public static void main(String args[]) { String ticket1 = "123456789012"; String ticket2 = " "; int i, sum, rema..

Transaction rolled back because it has been marked as rollback-only

오픈을 앞둔 시점에 transaction 관리를 강화하기 위하여 transaction.xml 에 아래와 같은 AOP 를 추가하였다. 여기서 ${service.basePackage} 는 profile.properties 에 정의 되어 있다. 파일명이 Service로 끝나는 파일은 일괄 적용한다는 의미이다. 물론 이것의 구현체도 대상에 포함된다. 그랬더니 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has ..

중복 로그인 방지 로직

중복 로그인을 체크하는 로직을 구현하는 미션이 프로젝트 마지막 단계에 주어졌다. 중복 로그인했을 때 먼저 로그인한 사용자가 세션 아웃 되는 것을 표준으로 정하였다. 이 때 최종 접속자의 IP와 로그인시각을 안내 받아야 한다는 전제조건이 있다. 스프링에서 제공하여 security 기능을 이용하여 구현해 보고자 했으나 생각대로 잘 되지 않았다. 스프링 설정으로 중복 로그인을 체크할 수는 있었으나 최종 접속자의 IP와 접속시각을 보여주고자 하는 곳에서 난관을 만났다. 세션이 invalid 되었기 때문에 세션아이디를 비롯한 사용자아이디, 접속IP등 세션에 보관되어 있는 정보가 싸그리 사라져 버린 상황이었기 때문이다. 그래서 결국 로그인 히스토리를 보관하고 있는 테이블에서 정보를 추출하여 중복로그인을 체크하도록 ..

JEUS 에서 MSSQL 서버 JDBC 연결

JEUS에서 MS SQL 서버 2005 로 접속할 경우가 있어서 인터넷을 뒤져 보았더니 다음과 같은 정보를 수집할 수 있었다. 1. JEUSMain.xml 설정 others 접속명 com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource ConnectionPoolDataSource DB명 포트 아이피 사용자 비밀번호 10 20 2 3600000 그리고 $JEUS_HOME/lib/datasource/ 에 sqljdbc4.jar 를 복사해 넣는다. jboot 할 때 이 jar가 로딩된다. 특정 컨터이너에서만 사용하게 되어 별도로 지정하고 싶다면 JEUSMain.xml 의 해당 컨테이너 설정 부분에 를 지정할 수도 있다. container4 4 /user..

javacore 파일 찾기

java 어플리케이션에서 코어덤프가 발생되면 javacore 파일이 생성된다. 이 파일을 분석하여 무슨 이유로 프로그램이 죽었는 지 유추해 볼 수 있다. #:[/user01/app]find . -name '*javacore*' ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041517.8389010.0003.txt ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041527.8389010.0006.txt ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041537.8389010.0..

반응형