posted by 시드라엘 2015. 8. 11. 09:16

제목 : [ Eclipse ] - 1은(는) 1바이트 UTF-8 시퀀스에 대해 부적합한 바이트입니다.



설명 : 

콘솔에 *.xml 에대하여 1은(는) 1바이트 UTF-8 시퀀스에 대해 부적합한 바이트입니다. 오류가 발생하는데. 

해당 파일을 열어서 ( 소스말고 컴파일된것 ) 확인해보면 한글이 깨져있고. 에디터플러스로 열어보면 ansi로 열릴것이다.



[10:30:06.406] [localhost-startStop-1] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.initialize 165 | Initializing ExecutorService 'taskExecutor' [10:30:06.407] [localhost-startStop-1] INFO org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization 309 | Bean 'taskExecutor' of type [class org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) [10:30:06.849] [localhost-startStop-1] INFO org.springframework.ws.soap.saaj.SaajSoapMessageFactory.afterPropertiesSet 139 | Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol [10:30:06.972] [localhost-startStop-1] INFO org.springframework.beans.factory.config.PropertiesFactoryBean.loadProperties 172 | Loading properties file from class path resource [ -- 안알려줌 -- /config.xml] [10:30:07.380] [localhost-startStop-1] WARN org.springframework.web.context.support.XmlWebApplicationContext.refresh 487 | Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cmnClientInterceptor' defined in file [D:\ -- 안알려줌 -- \app-client.xml]: Cannot resolve reference to bean 'keyMngService' while setting bean property 'keyMngService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'keyMngService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logSqlSession' defined in file [D:\ -- 안알려줌 -- \app-datasource.xml]: Cannot resolve reference to bean 'logSqlSessionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'logSqlSessionFactory' defined in file [D:\ -- 안알려줌 -- \app-datasource.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\ -- 안알려줌 -- \CodeMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1은(는) 1바이트 UTF-8 시퀀스에 대해 부적합한 바이트입니다. at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) ~[spring-beans-4.1.2.RELEASE.jar:4.1.2.RELEASE] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) ~[spring-beans-4.1.2.RELEASE.jar:4.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1471) 




사용법 및 예제 : 


적용법

이클립스 바로가기 -> 마우스 우클릭 -> 속성 -> 파일위치열기 -> eclipse.ini -> -Dfile.encoding=UTF-8  추가

톰켓 클린 -> 프로젝트 클린 -> 재구동 -> -Dfile.encoding=UTF-8  제거


-Dfile.encoding=UTF-8  를 제거하는 이유는 이클립스에 프로젝트가 여러개일경우 강제로 인코딩이 변경되므로 다른 인코딩을 사용하기위해






경험 : 

가끔 세팅을 바꾸거나 첫 세팅을 했을경우. 혹은 A 프로젝트에 페어런트 프로젝트가 있을경우 혹은 컴파일상태가 메롱하다고 느껴졌을경우.


분명 프로젝트랑 모든 세팅은 UTF-8로 되어있지만 이클립스 -> 톰켓 , 톰켓 -> 컴파일 구간중 어디가 문제인지 모르겠지만

UTF-8 -> ANSI 로 변경이 일어나면서 한글이 깨지는것.

 



검색단어 : 1은(는) 1바이트 UTF-8 시퀀스에 대해 부적합한 바이트입니다.

posted by 시드라엘 2015. 7. 10. 13:57

제목 : [ Java, Eclipse ] - 프로젝트에서 공통 플젝트 당겨쓰기



설명 : 

보통 규모가 큰 프로젝트에서는 공통 부분을 따로 빼서 나중에 jar파일로 꼽아준다.

하지만 공통부분이 조금씩 변화하는 프로젝트에서는 공통부분소스를 다운받아서 싱크 관리를 할 수도 있다.

뭐 메이븐써서 매번 배포할수도있겠지만... 지금 이야기 하고 싶은부분은 자주쓰면서 까먹는 부분




사용법 : 

1. 프로젝트 우클릭 -> Properties -> Java Build path -> Add class folder -> 해당프로젝트의 클래스 폴더 체크

2. 프로젝트 우클릭 -> Properties -> Deployment Assembly -> Add -> 자바빌드패스앤트리 ( 위에서 추가한것 ) -> 확인



결과 : 

이 작업이 선행되지 않으면 프로젝트에서 공통부분클래스를 찾지 못하므로 클래스 낫파운드 에러가 발생한다.

 


경험 : 

자주 안쓰다보면 까먹는다.


검색단어 :




posted by 시드라엘 2015. 7. 7. 10:08

제목 : Project Lombok



설명 : 

Project Lombok

URL : https://projectlombok.org/

가이드 : http://jnb.ociweb.com/jnb/jnbJan2010.html

내가 아는한 이놈이 겟터 셋터를 지정해줌 그외 몇가지 어노테이션을 사용할 수 있음


Lombok Annotations - @Getter @Setter @NonNull @ToString @EqualsAndHashCode @Data @Cleanup @Synchronized 

@SneakyThrows : 

@Getter 

@Setter 

@NonNull 

@ToString 

@EqualsAndHashCode 

@Data 

@Cleanup 

@Synchronized 

@SneakyThrows 




사용법 : 

1.

pom.xml 추가

pom.xml

<dependencies>

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>0.9.2</version> </dependency> </dependencies> <repositories> <repository> <id>projectlombok.org</id> <url>http://projectlombok.org/mavenrepo</url> </repository> </repositories>


2.

이클립스에 lombok설치 ( 이게 라이브러리만 꼽는다고 되는게 아니라 롬복을 설치해야 한다. )

롬복 설치시 eclips.ini 파일에

-javaagent:lombok.jar -Xbootclasspath/a:lombok.jar

내용만 넣으면 된다고 하는데 난 안되더라. 그래서 설치를 해야하는데 설치하는방법은

CMD

java -jar C:\Java\repos\org\projectlombok\lombok\1.14.8\lombok.jar ( 롬복경로 )

하면 아래와 같은 창이 뜬다.


Specify location.. 버튼 -> 이클립스 설치된 경로의 eclipse.exe 를 선택

Install / Update   버튼

Quit Installer 버튼

이후 eclipse.ini 파일을 열어보면

-javaagent:lombok.jar -Xbootclasspath/a:lombok.jar

가 추가되있을것이다.



결과 : 

이클립스에서 나오던 겟터 세터 오류가 사라짐

 


경험 : 

이걸 사용한다고 딱히 좋다는 생각은 안든다. 왜냐면 난 VO를 안쓰는 편이거든.

거기다가 이클립스에 뭔가를 설치해야만 한다니.. 처음에 몰랐을때는 왜 게터세터에서 죄다 오류가 날까? 라고 생각함.

다수의 인원이 작업하는 플젝에선 인원이 나가고 들어오는경우가 많기때문에 이런걸 사용하면 개발세팅가이트 같은것을

잘 만들어 둬야 할것 같다.


검색단어 :

lombok







posted by 시드라엘 2013. 7. 5. 10:43

우린 Tomcat 을 사용할 때

Document Root 를 어떻게 정의 하시나요??


일반적으로 이렇게..


<Host name="client.com" appBase="webapps">
   <Context path="" reloadable="true" docBase="/home/client/public_html" debug="1"/>


정의 하진 않나요?


그럼 저기서 appBase 는 무엇이며 docBase 는 무엇일까요?


그리고 docBase 에 상대적인 값을 넣는다면 어디를 보게 될까요?


기존에 appBase 를 deploy 되는 디렉토리로 생각했던 시점이 있었습니다.

그래서 virtual domain 을 사용할 경우 appBase 를 같은 곳으로 둘 경우 문제가 발생할 수 있다고 생각했었지요...

그리고 appBase 로 인해 실제로 문제가 발생하기도 했었습니다.


문제가 발생한 설정값입니다.



 

<Host name="client.com" appBase="/home/appweb">
   <Context path="" reloadable="true" docBase="/home/appweb" debug="1"/>


appBase 와 docBase 가 같을 경우에 정상적으로 동작하지 않는 경우가 있더라구요...


그래서 appBase 와 docBase 가 어떻게 쓰여지는 것인지 알아보고자 했습니다.


결론은 이렇습니다.


- docBase : The Document Base (also known as the Context Root) directory for this web application, or the pathname to the web application archive file (if this web application is being executed directly from the WAR file).


- appBase : The Application Base directory for this virtual host.


그럼 어떻게 사용하는게 좋을까요?


With following configuration there was a problem:

        <Host name="client.com" appBase="/home/client/public_html">
           <Context path="" reloadable="true" docBase="/home/client/public_html" debug="1"/>

and fix was pretty easy

        <Host name="client.com" appBase="/home/client">
           <Context path="" reloadable="true" docBase="public_html" debug="1"/>

 



이렇게 사용하라고 안내를 해주는군요.

하지만 지금처럼 사용하는 방식도 틀리다는것을 말하는건 아닙니다.
단지 appBase 와 docBase 에 대해서 알아가자는 것이지요~
 

 

posted by 시드라엘 2013. 7. 5. 10:41

// tomcat - server.xml파일에 DB Connection생성을 위한 설정(<Host>태그 내부에 추가함)

 

<Context Path="/myapp" docBase="myapp" debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

                maxActive="100" maxIdle="30" maxWait="10000"

                username="sys" password="password"    

                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

                url="jdbc:Microsoft:sqlserver://localhost:3306/javatest?autoReconnect=true"/>

</Context>

 

//내용설명

Context - path : URL 호출시 사용될 이름

            - docBase : 실제 웹 어플리케이션이 위치한 폴더명

            - debug : 로그 작성 레벨

            - reloadable : 톰캣서버의 재시작 없이 수정된 내용을 불러오기 위한 옵션

            - crossContext : myapp이외의 Context에서도 사용 가능하도록 하는 옵션

Resource - name : Resource명칭(JNDI Lookup 시 사용할 명칭)

              - auth : Resource 관리자를 지정. 여기서는 톰캣컨테이너가 관리자임

              - type : Resource 의 형태 지정. 데이타소스 형태를 지정함

              - maxActive : 최대 연결 가능한 Connection 숫자를 지정함

              - maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자

              - maxWait : Connection 재 사용을 위해 대기해야 하는 최대 시간(단위:ms)

              - username : DB접속 계정

              - password : DB접속 암호

              - driverClassName : DB와 접속하기 위한 driver 클래스를 지정. 예에서는 MySql임

              - url : 접속한 DB가 위치한 서버명, 포트명, 사용할 데이타베이스명을 지정

 

 

// tomcat - web.xml파일에 DB Connection생성을 위한 설정

<resource-ref>

              <description> DB Connection </description>

              <res-ref-name>jdbc/TestDB</res-ref-name>

              <res-type>javax.sql.DataSource</res-type>

              <res-auth>Container</res-auth>

</resource-ref>

 

//내용설명

resource-ref - description : 참조할 resource에 대한 설명

                  - res-ref-name : 참조할 resource의 명칭. Server.xml에 정의된 이름과 일치해야함

                  - res-type : 참조할 resource 형태로 여기서는 DataSource를 지정함

                  - res-auth : 참조할 resource를 관리할 주체로 톰캣컨테이너를 지정함

 

 

- jsp 페이지에서 호출방법

   Context ic = new InitialContext();
   DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/TestDB"); 
   con = ds.getConnection();

 

  * mysql 의 경우 context 가 다르면,  각각 설정을 따로 하셔야 합니다.

 

  * data source 의 접근 방식은 다음과 같이 할 수도 있습니다.

   Context initContext = new InitialContext();
   Context envContext  = (Context)initContext.lookup("java:/comp/env");
   DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
 

 

  * tomcat 에서 JNDI 관련 에러메시지별 대처 방법

    - Cannot load JDBC driver class 'com.mysql.jdbc.Driver', cause: com.mysql.jdbc.Driver 또는

       Null Pointer Exception '', cause: No suitable driver

    ==> 해당 jdbc 드라이버(위의경우 mysql 드라이버) 가 없기 때문입니다.

          해당 드라이버 파일을 $CATALINA_HOME/common/lib 디렉토리로 복사합니다.

    - Name xxxx is not bound in this Context

      ==> server.xml 과 web.xml 에서 해당 JNID가 설정되지 않은 경우입니다.

           server.xml 과 web.xml 에 JNDI resource 를 설정하고 이름을 동일하게 설정하도록 합니다.

 

 

 

posted by 시드라엘 2013. 7. 5. 10:39

web.xml파일의 구성

1. x파일은 다음과 같이 구성된다.

- xml정의와 스키마 선언부

- 웹 애플리케이션 전체 설정

- jsp, 서블릿 관련 설정

- tag library 관련 설정

- 기타설정

2. xml정의와 스키마 선언부 : xml정의와 스키마 선언부는 xml문서에서 공통으로 필요한 xml 버전 선언과 스키마를 정의하는 부분으로 다음과 같이 공통된 버전 정의와 스키마를 가진다.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

3. 웹 애플리케이션 전체 설정

<web-app>

        <display-name>애플리케이션 이름</display-name>

        <description>애플리케이션에 대한 설명</description>

        <welcome-file-list>

               <welcome-file>처음 시작할 파일 이름</welcome-file>

               <welcome-file>두번재로 시작할 파일 이름</welcome-file>

        </welcome-file-list>

</web-app>

4. jsp, 서블릿 관련 설정

        <servlet>

               <servlet-name>서블릿이름</servlet-name>

               <jsp-page>jsp페이지 경로</jsp-page>

               <servlet-class>서블릿클래스 경로</servlet-class>

               <load-on-startup>1</load-on-startup>

               <init-param>

                       <description>인자설명</description>

                       <param-name>인자이름</param-name>

                       <param-value>인자값</param-value>

               </init-param>

        </servlet>

        <servlet-mapping>

               <servlet-name>매핑할 서블릿이름</servlet-name>

               <url-pattern>매핑 패턴</url-pattern> 

        </servlet-mapping>

 

<load-on-startup>1</load-on-startup> : 0보다 큰값이면 배포 또는 서버실행시에 초기화하게 된다.

개발자가 설정하지 않으면 최초요청시에 초기화하게 되므로 시간이 소요됨..

5. tag library 관련 설정

<web-app>

        <taglib>

               <taglib-uri>태그라이브러리 경로</taglib-uri>

               <taglib-location>TLD(Tag Library Descriptor)</taglib-location>

        </taglib>

</web-app>

6. 기타설정

<web-app>

        <context-param>

               <description>설명</description>

               <param-name>인자이름</param-name>

               <param-value>인자값</param-value>

        </context-param>

</web-app>

 

 

posted by 시드라엘 2013. 2. 12. 16:14

 

슈부랄 하도 까먹어서 올려놓는다.

 

posted by 시드라엘 2013. 2. 1. 14:38

/*
 * Copyright 2008-2009 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package kpaa.cmmn.web;

import javax.servlet.ServletContext;

import org.springframework.web.context.ServletContextAware;

import egovframework.rte.ptl.mvc.tags.ui.pagination.AbstractPaginationRenderer;

/** 
 * @Class Name : ImagePaginationRenderer.java
 * @Description : ImagePaginationRenderer Class
 * @Modification Information 
 * @
 * @  수정일      수정자              수정내용
 * @ ---------   ---------   -------------------------------
 * @ 2009.03.16           최초생성
 * @ 2012.01.03           이미지등 변경
 *
 * @author 개발프레임웍크 실행환경 개발팀
 * @since 2009. 03.16
 * @version 1.0
 * @see
 *
 *  Copyright (C) by MOPAS All right reserved.
 */
public class ImgPaginationRenderer extends AbstractPaginationRenderer implements ServletContextAware{
 
 private ServletContext servletContext;
  
    /**
     * PaginationRenderer
     *
     * @see 개발프레임웍크 실행환경 개발팀
     */
    public ImgPaginationRenderer() {

    }
   
 public void initVariables(){

        // String strWebDir =
        // "/egovframework.guideprogram.basic/images/egovframework/cmmn/"; //
        // localhost
        // String strWebDir = "/###ARTIFACT_ID###/images/egovframework/cmmn/";
        /* 로컬 용 */
//        String strWebDir = "/KPAA/images/kpaa/";
        /* 서버 용 */
        /***
        String strWebDir = "/images/kpaa/";

        firstPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "btn_page_pre10.gif' border=0/></a>&#160;&#160;";
        previousPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='"
                + strWebDir
                + "btn_page_pre1.gif' border=0/></a>&#160;&#160;";
        currentPageLabel = "<strong>{0}</strong>&#160;&#160;";
        otherPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">{2}</a>&#160;&#160;";
        nextPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "btn_page_next1.gif' border=0/></a>&#160;&#160;";
        lastPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "btn_page_next10.gif' border=0/></a>&#160;&#160;";
                /***/
       
        String strWebDir = servletContext.getContextPath() + "/images/kpaa/itnl/content/";

        firstPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "page_pre2.gif' border=0 class=\"img_v img_link\"/></a>&#160;&#160;";
        previousPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='"
                + strWebDir
                + "page_pre.gif' border=0 alt=\"이전\" class=\"img_v img_link\"/></a>&#160;&#160;";
        currentPageLabel = "<span class=\"page_on\">{0}</span>&#160;&#160;";
        otherPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\" class=\"page_no\">{2}</a>&#160;&#160;";
        nextPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "page_next.gif' border=0  class=\"img_v img_link\"/></a>&#160;&#160;";
        lastPageLabel = "<a href=\"#\" onclick=\"{0}({1}); return false;\">"
                + "<image src='" + strWebDir
                + "page_next2.gif' border=0 class=\"img_v img_link\"/></a>&#160;&#160;";
       
 }
    
 public void setServletContext(ServletContext servletContext) {
  this.servletContext = servletContext;
  initVariables();
 }
}

 

이런식으로 컨테이너 구동시에 페이지네이션을 등록해서 쓰던데. 전자정부는

참 힘든게 너무 예전 버전이라서 컨텍스트 관련 세팅이 안되있었다.

그래서 최신 전자정부를 갖고 비교한부분이다.

저렇게하면 구동시에 등록된 빈이더라도 컨텍스트 패스를 알아낼 수 있다.

posted by 시드라엘 2012. 4. 3. 13:23

[Java] 가변인자(varargs : Variable Argument List) by Sigel

일 을 하다가 메소드 전달인자 수가 가변적인 부분이 생겼다. ArrayList를 사용하자니 전달인자 수가 너무 작다. 그렇다고 배열을 사용하자니 미리 그 수가 몇 개인지 예측하기가 힘들다. 어떻게 할까 생각하던 중 오랜만에 머리를 스치고 지나가는 가변인자(varargs : Variable Argument List)라는 것이 있었다.

가변인자(사실, 이 개념을 뭐라고 불러야 하는지 정확하게 모르겠다. 약간의 검색을 하긴 했지만 이 이름이 정확하지 않을 수 있다.)는 C언어에서 아주 자주 보던 printf의 전달인자 같은 것이다. printf의 전달인자는 다음 예제의 num과 같이 콤마(',')를 이용하여 얼마든지 줄 수 있지 않은가?? 이 개념이 아주 오래전.. 3년전인가?? JDK 5.0버전부터 Java에도 추가되었다.

#include <stdio.h>

int main( int argc, String *args[] )
{
    int num = 123;
    printf("The number is %d\n", num);
    return 0;
}


그럼 Java에서는 이 개념을 어떻게 사용할 수 있을까?? 간단하다. 다음 예제를 보자.

public static void main(String [] args
{
    foo(1, 2, 3);
    foo(1, 2, 3, 4, 5);
}

public static void foo(int ... nums)
{
    for(int num : nums)
    {
        System.out.print(num);
    }
    System.out.println();
    System.out.printf("The last number of list is %d\n", nums[nums.length - 1]);
}


위의 예제와 같이 main 메소드에서는 C언어와 동일하게 가변적으로 전달인자를 줄 수 있다. 호출받는 함수에서는 전달인자의 자료형과 변수명 사이에 점 3개를 찍으면 된다.

    void foo(int ... nums)


그 리고 그 변수는 배열과 동일하게 사용하면 된다. 배열이기 때문에 전달인자의 최대개수는 배열의 최대 사이즈와 동일하다. 역시 JDK 5.0에서 추가된 enhanced for loop에서 배열이기 때문에 쉽게 사용될 수 있다. enhanced for문은 다른 언어에 있는 foreach와 비슷하다. 위의 for문은 다음과 같은 내용이다.
    int num = 0;
    for(int i=0; i    {
        num = nums[i]
        System.out.print(num);
    }

생 각해 보면 쉽다. 그냥 배열이나 List, Set 등과 같은 객체의 요소를 처음부터 끝까지 순회해 주는 것이다. 사실 Iterator 객체를 안 좋아해서 for문으로 get(i)를 해서 많이 썼는데 덕분에 편해졌다. ㅋ 단, 디버깅할 때 인덱스가 없기 때문에 몇 번째 요소인지 알아보기가 힘들다는 점이 =ㅅ=;; 머.. Iterator도 인덱스가 없는건 마찬가지다.


+ enhanced for문은 코드가 간결해 지는 것 같아 자주 애용하는데.. 자꾸 윗분께서 이런 새로운(이라고 쓰고 3년이나 지났다고 읽는다) 기술, 개념은 되도록 쓰지 말라고 한다. TㅅT 복잡해지고, 검증이 안됐으며, 남들이 못 알아본다나..-ㅅ-;;



posted by 시드라엘 2012. 2. 23. 18:51
설명

- 소스에 DB 설정 부분을 Apache Tomcat에 설정으로 변경해주는 방법

 

설정 순서

1.     Tomcat 설치 폴더/lib로 이동하여 tomcat-jdbc.jar 파일을 확인한다.

 

2.     tomcat-jdbc.jar 파일이 없으면 아래 사이트로 이동하여 최신 버전으로 다운로드한다.

사이트 : http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

 

3.     Tomcat 설치폴더/lib 폴더로 이동하여 tomcat-jdbc.jar, ojdbc6-11.2.0.3.0.jar를 복사한다.

 

4.     Tomcat 설치 폴더/conf로 이동하여 server.xml 파일을 열고 아래 내용을

< GlobalNamingResources></GlobalNamingResources> 사이에 추가한다.

[추가내용: 각 설정은 개별로 용도에 맞게 설정한다.]

<Resource name="jdbc/myoracle"

                     auth="Container"

                     type="javax.sql.DataSource"

                     factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

                     driverClassName="oracle.jdbc.OracleDriver"

                     defaultAutoCommit="false"

                     url="jdbc:oracle:thin:@아이피:포트:스키마"

                     username="아이디"

                     password="암호"

                     maxActive="20"

                     maxIdle="10"

                   maxWait="-1"/>

 

5.     Tomcat 설치 폴더/conf로 이동하여 context.xml 파일을 열고 아래 내용을

<Context></Context> 사이에 추가한다

[추가내용]

<ResourceLink type="javax.sql.DataSource"

                name="jdbc/myoracle"

                global="jdbc/myoracle"/>

 

6.     Tomcat 설치 폴더/conf로 이동하여 web.xml 파일을 열고 아래 내용을

<Web-app></Web-app> 사이에 추가한다

[추가내용]

<resource-ref>

                     <description>DB Connection</description>

                     <res-ref-name>jdbc/myoracle</res-ref-name>

                     <res-type>javax.sql.DataSource</res-type>

                     <res-auth>Container</res-auth>

</resource-ref>

 

7.     Project에 WEB-INF/spring/infrastructure-context.xml 폴더로 이동하여 infrastructure-context.xml에 아래 내용을 추가하고 전 datasource을  주석이나 삭제 처리한다.

[추가할 dataSource]

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName" value="java:/comp/env/jdbc/myoracle" />

</bean>

 

[삭제나 주석처리 할 dataSource]

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value=""/>

<property name="username" value=""/>

<property name="password" value=""/>

</bean>