본문 바로가기

Java+

(23)
No tag library could be found with this URI 아래와 같은 jsp 소스가 있습니다. 네... 스프링 커스텀 태그를 사용하려고 합니다. 이 페이지를 불르면 톰켓 7에서는 아래와 같은 로그가 출력되고 정상적으로 작동됩니다. (다른 WAS는 모르겠슴 -_-/) 정보: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 뭐... 알아서 TL..
web.xml 서블릿 버전별 DTD 이클립스에서 메이블 프로젝트로 를 생성하면 web.xml 이 서블릿 2.3 버전으로 정의가 되더군요... 서블릿 2.5 버전으로 바꿔서 사용 했었는데 이참에 DTD 선언 정리합니다 Servlet 2.2 Servlet 2.3 Servlet 2.4 DTD 에서 스키마로 바뀌었습니다. Servlet 2.5 Servlet 3.0 Servlet 3.1
Spring Message Source from Database 스프링을 이용한 다국어 처리를 데이터베이스를 이용해 어떻게 할까 이것저것 고민하다가 구현해 봤습니다. 개발 환경 - Eclipse Indigo + Maven Integration (Sonatype, Inc.) - WebLogic 12c (Tomcat 7) 테이블은 아래와 같이 구성하였습니다. 특별한 것은 없고 여느 책에서나 나오는 스프링에서 MessageSource를 사용하여 다국어 메세지를 가져오는데 AbstractMessageSource 클래스를 상속 받아 따로 클래스를 만들어 봤습니다. (com.tistory.antop.framework.support.DatabaseMessageResource) 구동해 볼 수 있는 샘플을 만들어 봤습니다. 실제 메세지 리소스 부분만 구현하는 시간은 금방인데 하나의 ..
Infinite Routing DataSource 스프링을 이용하여 몇개의 데이터소스를 정해놓고 라우팅을 하는 경우 AbstractRoutingDataSource를 이용할 수 있었습니다. 하지만 경우에 따라 접속해야하는 데이터베이스가 무한대일 경우? 그래서 이것저것 생각해 봤는데 -_-.... 로그인시에 [고객 코드], [아이디], [비밀번호] 3가지를 입력 받습니다. [고객코드]로 고객을 찾은 후 고객의 정보로 디비 정보를 만든 후 ThreadLocal에 저장합니다. 그 후 로그인 처리를 합니다. 로그인 시에 데이터소스를 사용할 때 ThreadLocal에 있는 디비 정보(DbInfo 객체)로 데이터소스를 만들거나 캐쉬에서 가져오게 합니다. 로그인 때에 처음 그 데이터베이스에 접속을 하게 되니까 RoutingDataSource 부분에서 데이터소스를 처음..
Maven Repository for Oracle Library 메이븐 pom.xml 에서 오라클 라이브러리를 사용하기 위한 설정입니다. 메이븐 구조의 프로젝트에서 오라클 라이브러를 쉽게 사용하기 위해서 이것저것 찾아보다가 현재 아래의 저장소 URL 이 제일 적당한 것 같습니다. ... codeldshttps://code.lds.org/nexus/content/groups/main-repo ...com.oracleojdbc611.2.0.3compilecom.oracleucp11.2.0.3compile 각 버전을 확인 하는 방법은 브라우저에서 위 저장소 URL 을 입력하면 [groupId / artifactId / version] 순으로 디렉토리 구조로 되어 있습니다. 목록을 보면 오라클 이외에도 많은 라이브러리가 있는 것을 볼 수 있습니다. 자기가 필요로하는 라이브러..
Mybatis Type Handler 마이바티스를 이용하여 자바 객체와 데이터베이스 테이블을 매핑할 때 서로 완전히 다른 타입의 것들을 사용할 때가 있습니다. 그 예로 대표적인 예가 자바의 Boolean 과 데이터베이스의 플래그 문자입니다. 오라클 같은경우 boolean 타입이 없기 때문에 보통 CHAR(1) 잡고 Y/N 값을 많이 사용합니다. 다른 경우는 1 or 0 을 사용하여 참/거짓, 사용/미사용, 차단/허용 같은 on/off 플래그 값을 사용합니다. 값 자바 데이터베이스 boolean CHAR(1) INTEGER 참 / 사용 true Y 1 거짓 / 미사용 false N 0 org.apache.ibatis.type.TypeHandler 인터페이스를 이용해서 서로 다른 타입을 연결할 수 있습니다. package com.tistory...
Using AUTO_INCREMENT keys http://dev.mysql.com/tech-resources/articles/autoincrement-with-connectorj.html http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/jdbc.html MySQL 에는 AUTO_INCREMENT(이하 AI)라는 것이 있습니다. 오라클 디비의 시퀀스와 같이 자동으로 값이 증가하게 됩니다. AI를 적용하려는 칼럼은 기본키K(Primary Key)여야 합니다. Before JDBC API 3.0 JDBC API 3.0 이전에서는 INSERT 이후에 "select last_insert_id()" 쿼리를 날려서 추가된 AI 값을 가져와야 합니다. Conne..
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 Spring + JDBC를 이용하여 개발 시에 queryForObject(...) 메소드를 사용하여 하나의 객체만 가져올 경우 해당 데이터가 없으면 org.springframework.dao.EmptyResultDataAccessException 예외가 발생하게 된다. package kr.nerv.dao.impl; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDa..