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 머드초보
,
 
초간단시리즈-_-;
스프링에 있는 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 머드초보
,
 

어찌하다보니 스트럿츠2를 공부하게 되었네요.
책에 있는 예제를 이클립스로 셋팅법과 간단한 예제를 소개하려고 합니다-_-;
이 책에서 톰캣플러그인으로 사용하길래 그냥 Dynamic Web Project로 만들어도 될듯해서 ^^
(예제출처 : 스트럿츠2 프로그래밍 - 현철주, 정광선, 민상기 지음)

테스트환경 : Tomcat 6.0.16 + JDK 6 u 4 + Struts 2.0.11

이클립스를 실행합니다.
File -> New -> Project -> Dynamic Web Project선택
Project name을 HelloStruts2로 하고~ ^^
Target Runtime은 톰캣 6.0으로 추가를 해봅시다 ^^ New해서 Apache Tomcat 6.0선택하고 톰캣이 설치된 경로만 지정해주면 돼요 ^^
그리고 Finish를 클릭합시다 ^^

아.....스트럿츠2를 받아야죠! http://struts.apache.org/download.cgi 여기서 Struts 2.0.11버전을 받습니다.
압축을 풀고 lib경로에 있는 파일들을 방금 만든 프로젝트경로의 lib폴더로 복사합니다.
antlr-2.7.2.jar
commons-beanutils-1.6.jar
commons-chain-1.1.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
commons-validator-1.3.0.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
oro-2.0.8.jar
struts2-core-2.0.11.jar
struts-core-1.3.5.jar
xwork-2.0.4.jar

플러그인만 빼고 다 복사하면 돼요. 플러그인도 같이 복사하면 에러나요-_-; 해당 lib가 없어서 그런 것 같아요. spring plugin이런것을 사용하려면 spring lib가 있어야 하는 듯 해요 ^^

그다음 web.xml파일에 아래와 같은 filter를 추가해줍니다.
[code]
<filter>
   <filter-name>struts</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
 
<filter-mapping>
   <filter-name>struts</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
[/code]

Java Resources : src에 오른쪽 마우스를 대고 struts.xml파일을 하나 추가해줍시다.
이눔은 빌드되면서 classes폴더로 들어가게 됩니다.

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
 
<struts>
 <package name="default" extends="struts-default" namespace="">
 
  <action name="echo" class="example.chapter3.EchoAction">
   <result>/WEB-INF/echo.jsp</result>
  </action>
 
 </package>
</struts>
[/code]
보면 struts1이랑 비슷해요. 대신 이눔은 package라는 놈이 있어서 비슷한 놈들 끼리 묶을 수 있어요.

이제 저 example.chapter3.EchoAction을 만들어 봅시다.
Java Resources: src에 오른쪽 마우스를 대고! EchoAction클래스를 하나 만듭시다.
EchoAction.java
[code]
package example.chapter3;

public class EchoAction {
 private String echo;
 
 public String execute() throws Exception {
  return "success";
 }

 public String getEcho() {
  return echo;
 }

 public void setEcho(String echo) {
  this.echo = echo;
 }
}
[/code]
요렇게 작성을 합니다. 보면 execute가 있네요. 그리고 get, set이 있구요.

이제 action에 작성한 jsp를 작성해봅시다.
WEB-INF에 오른쪽마우스를 클릭해서 JSP를 선택해서 추가합니다.
아까 ACTION에서 작성한 echo.jsp파일을 생성합시다.
echo.jsp
[code]
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>예제3-1: echo</title>
</head>
<body>

<s:form action="echo" theme="simple">
 <s:textfield name="echo" />
 <p/><s:property value="echo" /></p>
 <s:submit />
</s:form>
</body>
</html>
[/code]
간단히 보면 스트럿츠태그가 있습니다. 예전에 쓰던 <html:, <bean: 보다 더 좋아진 듯 합니다.
신기한 건 s:textfield해놓고, name을 echo로만 줘도 setter가 작동하는 듯 합니다-_-;
s:property도 getter가 그냥 작동하는 듯 합니다. 뭐 아직 저도 잘몰라서 뭐라 말은 못하겠네요.
어쨌든 이제 실행시켜보고 field에 뭐라고 쓰면 뭐라고 나올 껍니다-_-;

url은 http://localhost:8080/HelloStruts2/echo.action 로 요청합니다 ^^

사용자 삽입 이미지


음....더 공부를 해봐야할 것 같네요 ^^
 
Posted by 머드초보
,
 
제가 제일 좋아하는 HelloWorld시간이군요-_-;

우선 Adobe Air를 받아야 합니다.
Window용으로 가볍게 받아서 설치합니다. 다음신공으로!
http://labs.adobe.com/downloads/air.html

Adobe Flex Builder 3 Beta 2를 받아야합니다.
Adobe 아이디가 있어야 합니다.
http://labs.adobe.com/downloads/ 
여기서 Flex Builder 3 Beta 2를 선택합니다.

여기에 AIR SDK가 포함되어 있습니다.
물론 AIR SDK만 받아서 컴파일하는 식으로 해도 되는데
전 클릭세대라서-_-;

자 우선 무쟈게 무거운 Flex Builder 3 Beta 2를 설치합시다.
StandAlone이든 Plugin방식이든 어떤 것으로 설치해도 됩니다.

Flex Builder를 실행해봅시다.

File -> New -> Flex Project를 만듭시다.
Project name은 "AirHelloWorld" 로 합니다.
Application type은 AIR를 할꺼니깐 당근 Desktop application (runs in Adobe AIR)를 선택합니다.
Finish를 클릭해서 프로젝트를 만듭시다.

[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute">
 
</mx:WindowedApplication>
[/code]
기본적으로 저렇게 되어있네요. 이건 WindowedApplication이라는 컴포넌트를 사용하는군요.
저기에 HelloWorld를 찍어봅시다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute"
title="Hello World">
<mx:Style>
Application
{
background-image:"";
background-color:"";
background-alpha:"0.5";
}
</mx:Style>
<mx:Label text="Hello AIR" horizontalCenter="0" verticalCenter="0"/>
</mx:WindowedApplication>
[/code]
Label컴포넌트를 하나 추가해서 Hello AIR라고 찍었네요. Flex랑 문법이 같아요-_-;
Run As를 실행해서 Adobe AIR Application을 선택하고 OK를 누릅시다.
사용자 삽입 이미지
아...예전에 빡씨게 윈도우프로그래밍을 공부하던게 생각나네요-_-;
이건뭐 디게 쉬워졌네요. 기존 C/C++기반의 윈도우즈프로그래밍보다 강력하다고는 말 못하겠지만, 웹과 연동하거나 데이터를 다루는 부분은 더욱 코딩하기 쉬워질 것 같네요.
MFC프로그래밍 해보신 분들은 알껍니다-_-;

이거를 배포해보도록 합시다-_-; install프로그램까지 친절하게 만들어주는군요-_-;

이클립스에 Flex Navigator에서 AirHelloWorld를 클릭한 뒤 export를 합시다.
그러면 Flex폴더안에 Export Release Version이라는 게 있습니다. 고걸 선택합니다.
다 default로 하고 export하는 파일의 확장자는 air인데, 이거를 더블클릭하면 자동으로 설치가 됩니다.
(물론 AIR가 설치된 Desktop에서만 되겠지요 ^^)

다음으로 넘어가면 Digital Signature라고 해서 디지털서명같은데요. 잘모르겠습니다-_-;
그냥 Create로 하나생성해서 이름쓰고, 비번정하고, 한다음에 비밀번호를 씁시다 ^^
(저작권 보호 그런건가요?-_-;)

그다음 Finish를 클릭합니다. 그러면 air파일이 생성되었습니다.
이거를 설치해봅시다.
export한 파일을 찾아서 더블클릭합니다.
사용자 삽입 이미지
그러면 저렇게 뜨는데 install을 클릭해서 설치를 해봅시다.
desktop에 아이콘을 추가할 꺼냐고 묻네요.
설치후에 application을 실행할껀가도 묻는군요.
어디다 설치할지도 묻네요. Program Files로 되어있을텐데 저기다 설치하면 자동으로 폴더가 AirHelloWorld가 만들어지게 됩니다. 설치가 완료되면...
아까 플렉스에서 실행한 화면이 뜨네요-_-;

지울때에는 프로그램 지울 때 처럼 지우세요-_-;
사용자 삽입 이미지

이거 뭔가 새로운 세계에 온 듯 하네요-_-;

따라하기 출처 - Developing AIR Applications with Adobe Flex (adobe)
 
Posted by 머드초보
,
 

솔직히 뭐 구축하고 자시고 할것도 없는데-_-;
저도 몇시간의 삽질끝에 알아냈습니다. 삽질하시는 분들에게 도움을 드리고자-_-;

우선 SKVM SDK를 받아야 합니다.
http://www.developerzone.co.kr
이 사이트에서 회원가입을 해야합니다.
회원가입후에 메뉴에서 DOWNLOAD -> SDK 클릭한다음에
WIPI 에뮬레이터(SKVM 2.0)을 받습니다. 설치합니다.

※참고로 eclipse 버전이 3.2라면 eclipse plugin이 작동하지 않습니다. 설치시 체크 해제하고 설치하세요.

사용자 삽입 이미지
WIPI-Java 2.0.2를 실행했을 때에 요게 뜨면 제대로 설치된 겁니다.

지긋지긋한 이클립스를 켜봅시다.
새로운 자바프로젝트를 만듭시다.
File -> New -> Java Project
Project Name은 TestWipi로 합시다.

TestWipi프로젝트에 대고 alt + enter를 눌러서 Properties를 선택합니다.
얘는 자바sdk로 작동하는 놈이 아니기때문에 자체적인 클래스파일로 바꿔줘야 합니다.
그게 방금 설치한 SKVM에 포함되어 있습니다.
Java Build Path를 클릭하시고, Libraries를 클릭하시면 기본으로 있는 것을 지워버리고
Add External JARs를 클릭해서 C:\Program Files\xce\WIPI-JAVA 2.0.2\classes\classes.jar 파일을 추가합니다.
사용자 삽입 이미지


아 그리고, 위피는 SDK를 1.4로 쓰나봅니다. 그 이상의 SDK를 설치했으면 컴파일시 하위버전으로 컴파일 해야합니다.
Properties -> Java Compiler에서 Enable project specific settings를 체크해주고,
Compiler compilance level을 1.4로 바꿉니다.

사용자 삽입 이미지

그러면 셋팅은 다 된 겁니다-_-;

간단한 예제를 작성해봅시다.
새로운 클래스로 TestWipi.java를 생성하는데 extends를 MIDlet으로 합시다.
[code]
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class TestWipi extends MIDlet {

 private Display display;
 private TextBox tb;

 public TestWipi() {
  display = Display.getDisplay(this);
  tb = new TextBox("Example", "Hello XCE", 20, TextField.ANY);
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub
 }

 protected void pauseApp() {
  // TODO Auto-generated method stub
 }
 
 protected void startApp() throws MIDletStateChangeException {
  // TODO Auto-generated method stub
  display.setCurrent(tb);
 }
}
[/code]
WIPI-Java 2.0에서 실행해봅시다.
File -> Open -> Add클릭 후 해당 class파일 선택 Run
사용자 삽입 이미지

아 잘되네요. 글이 너무 길어져서 핸드폰으로 받는 법은 다음으로-_-;
 
Posted by 머드초보
,