본문 바로가기

Define Java/FrameWorks

Spring 3.0.5 + Spring MVC(WEB) 3.0.5 + MyBatis 3.0.4 + ehcache2.4.2 + tiles2.2.2 + log4j 1.2.13

이번 프로젝트를 진행 하면서 최신버젼으로 셋팅을 해 보았는데 문제가 참 많았다.

iBatis에서 MyBatis로 바뀌면서 xml dtd도 바뀌고 실행 메소드도 바뀌고 참 머리가 아프다.

거기에 ehcache 사용으로 인해서 MyBatis와 Logging 문제로 하루종일 셋팅하고 참 진짜 너무 어렵다.

각 설정했던 상황은 다음과 같다.

/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <display-name>MOA IT PROJECT</display-name>
 <filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>codelabor-spring-mvc-template.root</param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>10000</param-value>
    </context-param>   
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

 <servlet>
  <servlet-name>cms</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>cms</servlet-name>
  <url-pattern>*.cms</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>


/WEB-INF/applicationContext.xml


 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
 <!-- 데이터소스 생성 -->
 <bean id="dsCMS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="{URL}" />
  <property name="username" value="{ID}" />
  <property name="password" value="{PW}" />
  <property name="maxActive" value="10" />
  <property name="maxIdle" value="3" />
  <property name="maxWait" value="10000" />
  <property name="defaultAutoCommit" value="false" />
  <property name="validationQuery" value="select 1 from dual" />
 </bean>
  
 <!-- MyBatis Session  -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
  <property name="configLocation" value="/WEB-INF/config/mybatis-config.xml" />
  <property name="mapperLocations" value="/WEB-INF/config/mapper/*.xml" />
  <property name="dataSource" ref="dsCMS" />
  <property name="transactionFactory">
   <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
  </property>
 </bean>
 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory" />
  </bean>

 <!-- 트랜젝션 메니져 -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dsCMS" />
 </bean>
 <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
  <property name="transactionManager" ref="transactionManager" />
 </bean>
 
 <!-- Tiles 2 -->
 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
   <list>
    <value>/WEB-INF/tiles/tiles-def.xml</value>
   </list>
  </property>
 </bean>
 
 <!-- EHCache -->
 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" scope="singleton">
  <property name="configLocation" value="/WEB-INF/ehcache.xml" />
 </bean>
 <bean id="cmsCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
  <property name="cacheManager" ref="cacheManager" />
 </bean>
 
 <!-- DAO SESSTING -->
 <bean id="testDAO" class="TestDAO">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
 </bean>
</beans>
 



/WEB-INF/cms-servlet.xml


 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
 <bean id="handlerMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="order" value="1" />
  <property name="alwaysUseFullPath" value="true" />
  <property name="mappings">
   <props>
    <prop key="/test.cms">testController</prop>
    <prop key="/moa.cms">testController</prop>
   </props>
 </property>
 </bean>
 
 <!-- TESET Controller -->
 <bean id="testController" class="TestController" p:methodNameResolver-ref="parameterMethodNameResolver">
  <property name="testDAO" ref="testDAO"></property>
 </bean>
 
 <!-- 파라미터별 리졸뷰  -->
 <bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName" value="command" />
  <property name="defaultMethodName" value="list"></property>
 </bean>
 
 <!--  URL Mapper -->
 <bean id="handlerMapping1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="alwaysUseFullPath" value="yes" />
 </bean>
 
 <!-- Resolvers -->
 <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
  <property name="order" value="1"/>
 </bean>
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
  <property name="order" value="2"/>
 </bean>

 
</beans>



/WEB-INF/config/mybatis-config.xml
 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
  <setting name="cacheEnabled" value="true" />
  <setting name="useGeneratedKeys" value="true" />
  <setting name="defaultExecutorType" value="REUSE" />
 </settings>
 <typeAliases>
  <typeAlias alias="hashMap" type="java.util.HashMap" />
  <typeAlias alias="map" type="java.util.Map" />
 </typeAliases>
</configuration>


/WEB-INF/config/mapper/user.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
 
 <cache type="org.mybatis.caches.ehcache.EhcacheCache" />
 <cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
 
 <resultMap type="hashMap" id="userHashMap">
  <result property="contents" column="contents" jdbcType="CLOB" javaType="java.lang.String"  />
 </resultMap>
 
 <select id="selectTest" useCache="true" parameterType="hashMap" resultMap="userHashMap">
  <![CDATA[
  SELECT A.BOARDNO,  A.SUBJECT, A.WRITER, A.PASSWORD, A.HIT_CNT, A.MEMO_CNT, A.FILE_CNT, A.SUBMENU_YN, A.NOTICE_YN, A.DELETE_YN, A.REGISTY_DT,
       A.MODIFY_DT, A.BOARDID, A.WRITERIP, A.THUMBNAIL, A.FILES, A.DEPTNAME, A.TELEPHONE, A.EMAIL, A.SECURITY_YN, A.BOARDCATEGORYID
  FROM TB_BOARD A
 ]]>
  </select>
</mapper>


/WEB-INF/tiles/tiles-defs.xml


 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC  "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>
 <definition name="indexLayout" template="/WEB-INF/jsp/layout/index/layout.jsp">
  <put-attribute name="title">레이아웃페이지</put-attribute>
  <put-attribute name="header" value="/WEB-INF/jsp/layout/index/header.jsp" />
  <put-attribute name="menu" value="/WEB-INF/jsp/layout/index/menu.jsp" />
  <put-attribute name="body" value="/WEB-INF/jsp/layout/index/body.jsp" />
  <put-attribute name="footer" value="/WEB-INF/jsp/layout/index/footer.jsp" />
 </definition>
</tiles-definitions>



/WEB-INF/ehcache.xml
 <?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="ehcache.xsd">
 <diskStore path="java.io.tmpdir" />
 <cache name="com.whatever.SOMECACHE" maxElementsInMemory="2000"
  eternal="false" timeToLiveSeconds="86400" overflowToDisk="false"
  memoryStoreEvictionPolicy="LRU" />
</ehcache>


/WEB-INF/log4j.xml
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="debug" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <appender name="info" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <appender name="log-file" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="test-daily.log"/>
        <param name="Append" value="true"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <category name="java.sql.Connection">
  <priority value="debug" />
 </category>
 <category name="java.sql.PreparedStatement">
  <priority value="debug" />
 </category>
 <category name="java.sql.ResultSet">
  <priority value="debug" />
 </category>
    <category name="java.sql.Statement">
  <priority value="debug" />
 </category>
 <category name="org.apache.ibatis">
  <priority value="debug" />
 </category>
 <category name="org.springframework.web.servlet.DispatcherServlet">
  <priority value="error" />
 </category>
    <root>
        <level value="debug"/>
        <appender-ref ref="debug"/>
    </root>
</log4j:configuration>