http://mudchobo.tomeii.com/tt/236 에 이어서-_-;
이제 셋팅이 끝났으면 코딩을 해봅시다.

※이 예제는 스프링프레임워크에서 제공하는 스텝바이스텝 예제의 일부를 조금 수정한 것 입니다.

우선 DB구조입니다-_-;
[code]
CREATE TABLE `products` (
  `id` int(11) NOT NULL,
  `description` varchar(255) default NULL,
  `price` decimal(15,2) default NULL,
  PRIMARY KEY  (`id`),
  KEY `products_description` (`description`)
) ENGINE=MyISAM DEFAULT CHARSET=euckr;

INSERT INTO `products` (`id`, `description`, `price`) VALUES
(1, 'Lamp', 391.50),
(2, 'Table', 2918.85),
(3, 'Chair', 884.27);
[/code]

그냥 src폴더는 자바서버단 폴더구요. flex_src폴더는 플렉스클라이언트단 폴더입니다^^
우선 스프링을 사용할 수 있게 web.xml파일을 수정해봅시다.
web.xml파일을 열어서 코드를 추가합니다.

web.xml
[code]
<context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

<listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>
[/code]
applicationContext*라고 적어 놓은 이유가 ibatis랑 분리를 하려고-_-;
설정파일은 applicationContext.xml과 applicationContext-ibatis.xml 두개를 사용할껍니다.

src에다가 코딩을 해봅시다.
java는 perspective를 Java EE로 바꾸고 합시다-_-;

우선 domain부분에 ValueObject를 하나 만들어봅시다-_-;
Java Resources:src에다가 New를 하고 class를 선택합니다.
package는 springapp.domain이라고 하구요.
Name은 Product라고 하고 Finish
[code]
package springapp.domain;

public class Product {

 private int id;
 private String description;
 private Double price;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getDescription() {
  return description;
 }

 public void setDescription(String description) {
  this.description = description;
 }

 public Double getPrice() {
  return price;
 }

 public void setPrice(Double price) {
  this.price = price;
 }
}
[/code]
ProductDao를 만들어봅시다.
Java Resource:src에 New해서 interface를 추가합시다.
package에다가 springapp.dao라고 써놓고,
Name에다가 ProductDao라고 씁시다-_-;
[code]
package springapp.dao;

import java.util.List;

import springapp.domain.Product;

public interface ProductDao {
 public List<Product> getProductList();
}
[/code]
딸랑 ProductList만 가져오는 메소드가 있어요!
저 Dao인터페이스를 구현해봅시다!!!
[code]
package springapp.dao;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import springapp.domain.Product;

public class ProductDaoImpl extends SqlMapClientDaoSupport implements
  ProductDao {

 protected final Log logger = LogFactory.getLog(getClass());

 @SuppressWarnings("unchecked")
 @Override
 public List<Product> getProductList() {
  logger.info("Getting products!");
  return getSqlMapClientTemplate().queryForList("getProductList");
 }
}
[/code]
ibatis부분인데요. 설정파일을 보도록 하겠습니다.

SqlMapConfig.xml
[code]
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig     
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"     
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
 <typeAlias alias="Product" type="springapp.domain.Product"/>

 <sqlMap resource="springapp/dao/MySQLProduct.xml" />
</sqlMapConfig>
[/code]
alias지정해주고, resource는 MySQLProduct.xml파일이네요. 보도록 합시다.

MySQLProduct.xml
[code]
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap     
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"     
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Product">

 <resultMap id="ProductMap" class="Product">
  <result property="id" column="id" />
  <result property="description" column="description" />
  <result property="price" column="price" />
 </resultMap>

 <select id="getProductList" resultMap="ProductMap">
  select id, description, price from products
 </select>

</sqlMap>
[/code]
getProductList라는 것은 products테이블에서 내용을 select하는 것이네요.
Dao가 완성되었네요! 너무 길어지니 다음이시간에-_-;

 
Posted by 머드초보

댓글을 달아 주세요

  1. IxU 2008.09.11 16:14  댓글주소  수정/삭제  댓글쓰기

    언제나 많은 도움이 되고 있습니다.
    감사합니다.^_^

    getSqlMapClientTemplate().queryForList("getProductList";);
    요기에서요.
    queryForList 는 인자가 2개가 필요한거 같은데...
    제가 잘못 알고 있나요??

    • 머드초보 2008.09.11 17:44  댓글주소  수정/삭제

      안녕하세요~
      2번째 인자는 있어도 되고 없어도 됩니다.
      파라메터가 없는 경우 안넣어도 되겠죠 ^^

  2. IxU 2008.09.12 10:08  댓글주소  수정/삭제  댓글쓰기

    아... 죄송합니다.
    spring버전 문제 였네요.
    제가 사용하고 있던게 1.2.8 이었거든요.
    1.2.8에서는 인자를 한개만 받는 메서드가 없었네요.

    확인도 안해보고 질문드린 점 죄송합니다.
    즐거운 추석 보내세요.^-^

    • 머드초보 2008.09.12 10:40  댓글주소  수정/삭제

      헉 그렇군요 ^^
      1.x버전의 스프링은 사용해보지 않아서 ㅠ
      IxU님도 추석 잘보내세요~^^

 
초간단시리즈-_-;
스프링에 있는 bean을 플렉스에서 가져다가 쓸 수 있어요!
멋져요!-_-;

우선 준비물! 저의 테스트 환경입니다.
Eclipse IDE for Java EE Developers  : http://www.eclipse.org/downloads/
Flex Builder 3 Eclipse Plug-in(로그인후받을 수 있음) :
http://www.adobe.com/cfusion/tdrc/index.cfm?product=flex_eclipse
JDK 6 update 5 : http://java.sun.com/javase/downloads/index.jsp
Apache Tomcat 6.0.16 : http://tomcat.apache.org/download-60.cgi
Spring Framework 2.5.2 : http://www.springframework.org/download
BlazeDS : http://opensource.adobe.com/wiki/display/blazeds/Downloads
Spring과 BlazeDS연동라이브러리 : blazeds-spring-beta1.jar 현재 beta1이군요.
http://www.igenko.org/archiva/repository/igenko/com/adobe/flex/blazeds-spring/
JDK6을 먼저 설치를 합니다.
이클립스는 받아서 그냥 압축을 풀어버립시다.
그리고, 플렉스빌더3 이클립스 플러그인을 설치 합니다.
톰캣은 ZIP버전이면 그냥 압축을 풀어놓고 JAVA_HOME을 잡아줍시다-_-;
스프링프레임워크는 lib파일을 가져다 쓸것이니 아무대나 압축을 풀어놓읍시다.

셋팅이 완료가 되었으면 이클립스를 띄웁시다.
File -> New -> Project선택, Flex Project선택 후 Next
Project이름은 SpringAndBlazeds라고 지어봅시다-_-;
Application Type은 Web Application이라고 하고, Application server type은 J2EE로 선택합니다.
넥스트를 하고 Target runtime에서 Tomcat을 설정해야합니다.
New한다음에 Apache폴더에 Tomcat 6.0을 선택하고, 해당 톰캣의 경로를 지정합니다.
Finish를 클릭하고, flex WAR파일을 선택하라고 하는데 받아놓은 blazeds.war파일을 선택하면 됩니다.
Finish를 클릭하면 끝납니다-_-; 셋팅이 완료가 되었어요!

이제 스프링IDE를 설치해봅시다.
이클립스메뉴에서 Help -> Software Updates -> Find And Install 선택
Search for new features to install를 선택 후 Next
New Remote Site선택 Name은 Spring IDE, url은 http://springide.org/updatesite/ 라고 씁니다.
추가한 것만 체크된 상태에서 Finish클릭!
Search Result에서 Spring IDE선택.
그러면 몇개는 설치 못하는데 설치 못하는 것은 체크해제를 시켜요-_-;
Dependencies에서 Spring IDE Dependencies 체크해제
Integration에서 Spring IDE AJDT Intergration 체크해제
AspectJ Development Tools도 설치하려면 하세요(전 사용할 줄 몰라요^^)
Next -> agree -> finish하면 설치가 됩니다.
설치가 다 되면 이클립스ide를 restart하라고 나와서 리스타트하면 돼요^^

그리고 우리가 만든 프로젝트에  마우스 오른쪽버튼을 클릭해서
Spring Tools -> Add Spring Project Nature선택 하면 완료됩니다.

필요한 라이브러리를 복사해봅시다.
dist/spring.jar : 스프링프레임워크를 쓰기 위해 꼭 필요한 놈.
dist/module/spring-test.jar : 스프링테스트 할 때 필요한 놈.
lib/jakarta-commons/commons-logging.jar : 로그찍을 때 필요한 놈.
lib/ibatis/ibatis-2.3.0.677.jar : ibatis쓸 때 필요한 놈.
lib/cglib/cglib-nodep-2.1_3.jar : Junit으로 테스트 할 때 필요한데, JUnit테스트를 할 때에는 Interface가 구현이 안되어있어서(aop를 사용하려면 interface가 구현이 되어있어야 한다고 하더군요) 필요한 놈.
lib/aspectj/aspectjweaver.jar : aop때문에 필요한 놈 같은데-_-;
lib/junit/junit-4.4.jar : JUnit을 사용하기 위해 필요한 놈.
mysql-connector-java-5.1.5-bin.jar : mysql Connector. db가 다른거면 다른 Connector가 있으면 돼요!
blazeds-spring-beta1.jar : 위에서 설명한 spring과 blazeDS와 연동할 때 필요한 놈.

셋팅은 여기까지-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 지돌스타 2008.06.18 12:46  댓글주소  수정/삭제  댓글쓰기

    좋은 자료예요~

  2. BlogIcon 시난 2008.06.25 14:23  댓글주소  수정/삭제  댓글쓰기

    아주 훌륭한! 도움이 되는! (재밌죠?^^;)
    정말 좋은 자료네요. 저도 오늘 홧김에 함 해보고 있습니다. ㅎㅎ;
    열람료 센스 클릭 꾸욱~

    • 머드초보 2008.06.26 18:11  댓글주소  수정/삭제

      앗 시난님 또 방문해주셔서 감사합니다 ^^
      저거 스프링이랑 BlazeDS 잘 모르고 무작정 따라해서 만든예제라-_-;
      완전 허접해요-_-;
      도움이 되셨다니 다행입니다 ㅠㅠ

  3. 2009.01.20 16:18  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 머드초보 2009.01.22 00:31  댓글주소  수정/삭제

      http://mudchobo.tomeii.com/tt/238
      글이 분할이 되어있어서요^^
      여기서 보시면 됩니다.

  4. 데이비슨 2009.03.24 11:05  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 플렉스 초보자 데이비슨입니다.
    저는 지금 LCDS를 이용해서 리모트 오브젝트를 사용하고 있는데요.
    지금 하고 있는 것을 스프링 프레임워크로 하려고 하는데
    LCDS에서 blazeds-spring-beta1.jar라이브러리를 사용해도 문제가 없나요.
    샘플을 사용해 보았는데, 돌아가는거 같은데 혹시 LCDS용라이브러리가 따로 있나 해서요!
    답변 주시면 감사하겠습니다.

    • 머드초보 2009.03.25 09:29  댓글주소  수정/삭제

      LCDS에서 사용해도 문제가 아마도 없을 겁니다.
      근데, 최근에 Spring에서 공식적으로 BlazeDS를 지원하기 시작했습니다.
      아마 LCDS에서도 될 듯 싶습니다.(해보진 않았습니다ㅠ)
      그 라이브러리를 사용하셔도 될 겁니다.

    • 데이비슨 2009.03.25 13:17  댓글주소  수정/삭제

      답변 감사합니다. 님글들을 읽고 플렉스의 개념을 잡고 있습니다. 블로그에 좋은 샘플들이 많아서 겁없이 도전해보고 있습니다. 감사합니다. 좋은 하루 되세요.

    • 머드초보 2009.03.27 01:47  댓글주소  수정/삭제

      아 감사합니다. 저는 제가 삽질한 것을 주로 올린거라 옳지 않은 것도 분명 있을 겁니다.
      개념은 책을 보시고 잡으시고, 제 삽질자료는 참조만 해주세요^^
      감사해요~

 
젠장...

웹개발자를 위한 스프링2.5프로그래밍을 읽고 있습니다.
제가 좋아하는 최범균(나중에 만나면 밥쏘겠습니다-_-; 만날일없겠지만^^)님이 쓰신 책인데 예전에 JSP를 입문할 때 최범균님이 쓰신 JSP 2.0프로그래밍을 읽고 입문했거든요.

책은 잘 쓰시는 것 같아요 ^^ 이해하기 쉽고 코드로 실무적인 면을 많이 설명하시는 것 같아요^^

그냥 AOP를 적용해보려다가 만난 메시지-_-;

Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

어떤 블로그 가니까 spring-framework-2.5.1에서 lib\cglib에 cglib-nodep-2.1_3.jar파일을 lib에 추가하면 된다는군요. 추가하니까.....되더군요-_-;

그나저나 이 책은 어제다 공부하지-_-; 할 것이 태산같군요 ㅠㅠ
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 에이레네 2008.03.16 16:39  댓글주소  수정/삭제  댓글쓰기

    오홋 이책 좋은가요..? 저도 한번 질러 볼까요? ㅋㅋㅋ

    • 머드초보 2008.03.17 17:05  댓글주소  수정/삭제

      제가 스프링은 잘몰라서 좋은지 안좋은지 모르겠지만
      책 구성을 봐서는 좋은 것 같습니다 ^^
      우선 소스코드로 설명을 해서 이해하기 쉽게 해놨어요^^
      지르세요~ ^^ BlazeDS랑 Spring랑 연동하면 최강이 될꺼에요!-_-;

  2. BlogIcon 최범균 2008.03.17 17:10  댓글주소  수정/삭제  댓글쓰기

    진짜 밥 쏘시나요? 밥을 쏘신다고 하시니까, 한번 뵙고 싶은걸요. ^^ 책이 도움이 되었으면 하구요, 질문거리 등등이 있으시면 자바캔에 올려주세요. (요즘 가능하면 몇일 안에 답 드릴려고 노력중입니다.)

    • 머드초보 2008.03.17 19:48  댓글주소  수정/삭제

      우와 최범균님 반갑습니다 ㅠㅠ
      핫핫~ 밥이야 당연히 대접을 ^^
      지금 이제 막 읽고 있는 단계라서 조금 더 읽어봐야할 듯 하네요^^
      질문은 자바캔에가서 올리도록 하겠습니다 ^^
      작년에 JSP입문했는데 고때 최범균님 책으로 입문하는 바람에
      개념을 빨리 쉽게 잡았던 것 같습니다 ^^
      암튼 방문해주셔서 영광입니다 ^^

  3. namo 2008.04.01 17:50  댓글주소  수정/삭제  댓글쓰기

    저도 최범균 님이 쓴 스프링 2.5 보고 있습니다. iBATIS 연동 관련을 보려는데 3장 남짓 되어 아쉬움이.
    위에 저자 댓글이 보이는 군요..

    • 머드초보 2008.04.02 08:33  댓글주소  수정/삭제

      우와 엄청빨리 보셨군요 ^^
      전 친구들이랑 스터디를 진행하고 있어요 ^^
      방문해주셔서 감사해요~ ^^

 

오늘도 삽질삽질을 하다가 드디어-_-;
저도 테스트라는 것을 하게 되었습니다.

우선 Junit4를 스프링에서 하기 위해서는 spring-framework-2.5.1.zip파일에서 lib/junit 폴더에 있는 junit-4.4.jar파일을 lib에 추가합니다.
참고로 이클립스에서 있는 놈은 4.3인데 최신버전을 좋아하는 저로썬 그냥 4.4를 /WEB-INF/lib에 추가해서 써요. 이거 이렇게 추가안하고 이클립스에서 제공하는 junit을 사용하면 뭐 이상한 워닝이 떠요-_-;
원래 기존에는 프로젝트의 properties에 Java Build Path에서 Libraries에서 Add Library에서 junit을 추가하는 식으로 했는데 이렇게 하면 워닝막 뜨던데-_-;

Classpath entry org.eclipse.jdt.junit.JUNIT_CONTAINER/4 will not be exported or published. Runtime ClassNotFoundExceptions may result. 

이런거 ^^ 아마 무슨 실행할 때에 클래스가 없다고 뜰 것 같다고 말하는 것 같아요-_-;
저렇게 하지말고 그냥 lib에다가 처박아넣으니 그냥 워닝도 안 뜨더라구요.

뭐어쨌든 테스트클래스를 만들어봅시다.

Project에다가 대고 New -> Source Folder 를 클릭해서 test라는 소스폴더를 만듭시다.
그리고 원하는 테스트를 만들고 싶은 클래스에 대고 오른쪽마우스를 클릭하고
New -> Other -> JUnit Test Case선택
맨위에 source folder만 프로젝트명/src를 /test로 바꿔주고 넥스트를 클릭합시다.
원하는 메소드를 선택할 수 있는데 원하는 메소드를 선택합시다.
그럼 이렇게 작성이 되네요.
[code]
@Test
 public void testUserDeptSearch() {
  fail("Not yet implemented");
 }
[/code]
코드를 작성해봅시다.
[code]
package com.mudchobo.searchbatch.service;

import static org.junit.Assert.assertTrue;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.mudchobo.searchbatch.dao.UsersDao;
import com.mudchobo.searchbatch.domain.Users;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
  "file:WebContent/WEB-INF/applicationContext.xml",
  "file:WebContent/WEB-INF/applicationContext-ibatis.xml" })
@TransactionConfiguration(transactionManager = "transactionManager",
       defaultRollback = true)
@Transactional
public class UsersManagerImplTest {

 @Autowired
 private UsersDao usersDao;
 
 @Test
 public void testUserDeptSearch() {
  System.out.println("UserDeptSearch");
  String dept = "김치";
  List<Users> usersList = usersDao.searchUsersDept(dept);
  Users users = usersList.get(0);
  System.out.println(users.getDept());
  assertTrue(users.getDept() != null);
 }
}
[/code]
저렇게 RunWith를 사용하면 되는 듯.
그리고 applicationContext파일은 여러개 일 때에는 저렇게 설정하면 돼요.
여기서 또 주의할 점은!
applicationContext.xml파일에 properties파일, sqlMapConfig.xml파일 같은 것을 표시할 때
보통 /WEB-INF/~~ 경로에다가 두시는 경우가 많은데요.
저기다가 두고,
[code]
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
  p:location="WEB-INF/jdbc.properties" />
[/code]
이렇게 작성해버리면 이 JUnit4는 저 jdbc.properties파일을 못찾습니다.
class path resource [WEB-INF/jdbc.properties] cannot be opened because it does not exist
이딴식으로 뜨는데요.
그래서 저런 파일들은 classpath인 classes폴더 아래에다가 두면 됩니다.
그냥 src폴더에 package하나 만들어서 설정파일은 다 때려박으세요-_-;
jdbc.properties, SqlMapConfig.xml파일 같은 것은(즉 applicationContext.xml파일에 써진 파일경로 같은거) classes경로 아래에 두도록 합시다. 그런다음에 파일경로 적는 부분에다가는
classpath:<package명>/SqlMapConfig.xml 이렇게 쓰면 돼요^^
그러면 JUnit도 잘 찾아요 ^^

실행할 때는 테스트자바파일에 대고 오른쪽버튼 누르면 JUnit Test가 나와요~

 
Posted by 머드초보

댓글을 달아 주세요

  1. 서영아빠 2008.03.28 11:32  댓글주소  수정/삭제  댓글쓰기

    좋은 내용 감사합니다.
    도움이 되었습니다. ^^

    • 머드초보 2008.03.28 12:44  댓글주소  수정/삭제

      도움이 되셨다니 다행입니다 ^^
      근데 전 테스트하다가 좀 문제점을 발견했는데-_-;
      dao에서 메소드호출 여러번하면 이상하게 다운이 되던데...
      어쨌든 방문해주셔서 감사합니다 ^^