'java'에 해당되는 글 3건

  1. 2007/04/20 Eclipse WTP + FlexBuilder Eclipse Plug-in 같이 사용하기 by 타오
  2. 2007/03/22 Java RESTful WS API (JSR-311) 의 첫 구현체가 나왔습니다. (2) by 타오
  3. 2007/02/13 라이브러리 (2) by 타오

프로젝트와 Flex프로젝트를 분리할 필요없이 "Dynamic Web Project" 형태로 웹프로젝트를 만드시고 프로젝트에 우클릭하셔서 "Add Flex Project Nature" 명령을 내리시면 자바 웹프로젝트이면서 동시에 플렉스 프로젝트가 됩니다.

"Servers" 윈도우를 여시고 톰캣등의 서블릿 컨태이너를 EclipseWTP 등록하신 등록된 서버에 새로 만든 프로젝트를 "Add or Remove Projects" 명령을 통해 Web Application으로서 작동할수 있도록 추가를 해주시고
프로젝트
이름이 test라면 서버를 start 하고 localhost:8080/test/xxx.html 같은 형태로 바로 확인이 가능합니다.

(위쪽 버튼들이 등록된 서버를 디버그나 실행 또는 프로파일 모드로 띠워주는 넘들이고 팝업을 통해서도 가능합니다)


그리고
"Navigator"창에서 프로젝트에 우클릭하셔서 등록정보로 들어가셔서 Flex Build Path output 위치를 WebContent 잡아주시면 컴파일된 swf 바로 위의 주소와 같은 형태로 접근이 가능해집니다.
(ex> http://localhost:8080/projectname/test.swf 또는 http://localhost:8080/projectname/test.html)

버측 디버깅을 하시고 싶으신 경우는 자바 코드에 브레이크 포인트를 걸고 톰캣등의 웹서버를 디버그 모드로 스타를 시키시면 가능하고 클라이언트를 디버깅 하시고 싶으신 경우는 기존 플렉스 개발시처럼 하면 되지만 웹페이지에 포함을 시켜서 디버깅을 하시고 싶으신 경우라면 실행메뉴를 여셔서 "URL or Path to lauch"부분에 swf파일 경로가 명시된부분을 위에서 언급한 http 스타일의 URL 바꾸시면 됩니다.
, swf 디버그 대상으로 하시지 마시고 html페이지를 대상으로 하면 됩니다.


* 예전에 작성하다 말아서 포스팅하지 않은 글인데 디버깅 방법에 대해 묻는 분이 있어서 마무리해서 포스팅합니다 ㅎㅎ

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/42 관련글 쓰기

댓글을 달아 주세요

구현하기는 귀찮고 이미 예제로 보여진 코드를 봐버려서 계속 기다리던 JSR-311의 첫 구현체가 어제 나왔습니다. Sun Web Developer Pack (SWDP)에 포함되어 릴리즈 되었는데요 jMaki라던가 Dynamic Faces등을 같이 포함하고 있네요.

* 다운로드는 위 SWDP 링크에 가시면 받을수 있습니다.

바로 아래 코드가 JSR-311의 예제로 Marc Hadley의 블로그에 포스팅됐던 저를 기다리게 만든  그 넘입니다.

@UriTemplate("widgets/{widgetid}")
@ConsumeMime("application/widgets+xml")
@ProduceMime("application/widgets+xml")
public class Widget {

    @HttpMethod(GET)
    public Representation getWidget(@UriParam("widgetid")
    String id) {
        String replyStr = getWidgetAsXml(id);
        return new StringRepresentation(replyStr, "application/widgets+xml");
    }

    @HttpMethod(PUT)
    public void updateWidget(@UriParam("widgetid")
    String id, Representation<Source> update) {
        updateWidgetFromXml(id, update);
    }

    @LastModified
    public Date getChangeDate(@UriParam("widgetid")
    String id) {
        return getLastChanged(id);
    }
}



보시다시피 annotation으로 해당 bean(POJO) 을 특정 url pattern(URITemplate)에 매핑하고 bean의 method들을 GET이나 PUT 등의 HttpMethod에 매핑하는 방식입니다.

어제 오늘 기존 구현에 적용해 보았는데 예상대로 아주 훌륭합니다! 빠르게 구현할수 있을뿐 아니라 코드가 직관적이라 참 좋네요 ㅎㅎ

머 사실 아직 버그가 눈에 많이 띠긴하지만 아직은 early access형태이고 RESTful WS에 걸맞게 아주 쉽게 구현할수 있다는점은 정말 높은 점수를 주고 싶습니다~
(URL패턴에서 추출된 문자열상에서 "///" 은 "/"로 변환되어버리더군요... 물론 인코딩된상태로 전달되었습니다)

한 가지 문제는 사용하는 방법이 문서가 빈약하기도 하고 NetBeans하고 자꾸 엮는다거나 code-generator까지 붙어 있고 머 좀 복잡하게 만들어놨더군요. 아마도 Marc Hadley 아저씨가 심하게 밀고 있는 WADL이나 JAX-WS등하고 통합때문인거 같기도 한데 시간 부족으로 자세히는 보지 못하고 generate된 테스트 코드를 살펴보고 바로 붙여보았더니 다행히 잘 되더군요^^


톰캣에 간단히 붙여봤는데요 먼저 위의 코드와 같은 방식으로 bean을 만드시고 그 클래스들을 RESTBeanResourceInterface를 상속한 넘에서 class reference를 외부로 제공해줍니다.

package com.wangtao.rest;

import java.util.HashSet;
import java.util.Set;

import com.sun.ws.rest.impl.RESTBeansResourcesInterface;

public class RestBeanResources extends RESTBeansResourcesInterface {
    private Set<Class> classes;
    @Override
    public Set<Class> getResourceClasses() {
        if(classes == null){
            classes = new HashSet<Class>();
            classes.add(RestBean1.class);
            classes.add(RestBean2.class);
            classes.add(RestBean3.class);
        }
       
        return classes;
    }
}



위의 클래스와 HttpRequest들을 해당 bean으로 매핑해줄 ServletAdapter를 web.xml에 적어주면 끝입니다

   
    <servlet>
        <servlet-name>RESTBeans Application</servlet-name>
        <servlet-class>
            com.sun.ws.rest.impl.container.servlet.ServletAdaptor
        </servlet-class>
        <init-param>
            <param-name>resourcebean</param-name>
            <param-value>
                com.wangtao.rest.RestBeanResources
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>RESTBeans Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>



테스트 해보시면 바로 각 URI형태에 매핑된 객체들의 함수들이 수행될겁니다~



update1.
구현법에 중요한 lib추가를 빼먹었네요^^  swdp.jar:/rest-impl/lib 밑의 4개 jar파일과 swdp.jar:/shared/lib/mail.jar를 WEB-INF/lib에 추가하니 잘 되는군요~

update2.
bean 작성 하는 코드 부분(첫번째 코드블럭)에
@UriTemplate("widgets/{widgetid}")
라고 쓰인부분이 구현체에서는 URI앞이 /로 시작해야합니다.
@UriTemplate("/widgets/{widgetid}")
처럼 말이죠~

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/31 관련글 쓰기

댓글을 달아 주세요

  1. 아 ;; 어렵다 ;; 무슨말인지;;;

    • 걍 서블릿을 상속안하고 일반 클래스를 만들어서 URL하고 연결짓는거였는데 저도 잘 모르다보니 심하게 장황했네요 ㅋㅋ

라이브러리

개발 : 2007/02/13 11:38

int len = 0;
while((len=in.read(buffer)) != 0){
    out.write(buffer, 0, len);
}

commons-io를 활용하면 아래와 같이 기술할수 있다.

IOUtils.copy(in, out);


무식하면 고생이다!
라이브러리 공부좀 하자 ㅡ,.ㅡ!!
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 타오

트랙백 주소 :: http://taoism.tistory.com/trackback/25 관련글 쓰기

댓글을 달아 주세요

  1. XFUtil.copy()도 똑같다는...