'JSR-311'에 해당되는 글 2건

  1. 2007/07/10 ShowFX - Web(Flash) PPT Viewer (8) by 타오
  2. 2007/03/22 Java RESTful WS API (JSR-311) 의 첫 구현체가 나왔습니다. (2) by 타오
오랫만의 글이네요^^;

오늘은 지난 반년간 열심히 만들어온 결과물인 ShowFX 라는 넘을 소개드리려고 합니다.

ShowFX는 웹상에서 PPT 문서를 바로 볼 수 있는 솔루션으로 Flash로 만들어진 PPT Viewer라 할 수 있습니다.
(ShowFX는 프로젝트 명으로 정식 제품명은 아닙니다)

아래는 ShowFX를 이용해 현재 구글에서 filetype:ppt thinkfree로 2007.07.10에 검색했을때 3번째에 랭크된 문서를 열어본 모습입니다.
(http://eeando.unl.edu/cehs/sydney/download/collaborativeOnlineApps.ppt)




* 미국에 있는 서버이다 보니 이미지가 상당히 늦게 뜨는군요. 이미지가 없는걸로 착각할듯 하네요. 얼렁 고쳐야할듯 ㅠ.ㅠ


보시다시피 ShowFX는 Flash를 이용해 렌더링을 하고 있으며 내부적으로는 swf 형태의 어플리케이션을 만들기 위해 Flex2 기술이 사용되었습니다.

간단히 기술적인 부분을 예기해보면 서버측에서 Thinkfree의 기술을 이용해 PPT 파일을 XML로 변환하고 클라이언트에서 Flex로 만들어진 PPT Viewer가 해당 XML을 화면에 렌더링 하는 구조로, 서버측은 자바기반으로 톰캣, JSR-311(Java Rest API) 등이 사용되었으며 클라이언트는 Flex2를 기반으로 약간의 Ajax가 사용되었습니다.
(구조도... 이런데는 재주가 없다보니 말로 때우렵니다 ;;)

현재 Thinkfreedocs에서 ShowFX가 적용되어 서비스 되고 있으며 조만간 OpenAPI형태로 누구나 자신이 원하는 문서를  원하는 곳에 임베드 할수 있는 형태로 서비스가 제공될 예정입니다^^


* 위의 임베드 된 문서보기처럼 간단히 다른 문서에 대해서 실행을 시켜보시고 싶으신분은
http://showfx1.thinkfreedocs.com:8080/ShowFX/sfx.jsp?url=<문서주소>
형태의 URL을 이용하시면 됩니다. 단 이 방식은 비공식적인 방법으로 간단한 테스트 등에만 사용하시기 바랍니다^^

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

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

  1. Subject: 어디서나 사용하는 PPT - ThinkFree Docs

    Tracked from Inspiration, Feel Good Factor for Flex Dev 2007/07/10 18:23  삭제

    PPT 파일을 SWF로 변환하여 발표하기! 라는 글을 보고 따라가봅니다. 먼저 ThinkFree Online 과 ThinkFree Docs 에 대하여 이해를 하셔야 할것같습니다. 이에 대한 설명은 여러 블로그나 해당 사이트에 자세하게 나와있으니 추가적인 설명은 하지 않도록 하지요. 특히 한컴 씽크프리 8월부터 미국에서 유료 서비스 라는 글에서 보듯이 조만간 유료화된 서비스 모델로 공개가 될 예정이라고 합니다. 글을 올려주신 박재현님은 지난번 WebA..

댓글을 달아 주세요

  1. 이미지 로딩이 정말 많이많이 늦네요, Flex에서 이미지부분을 완전 로딩전에 뭔가로 대체하는 것도 괜찮을 듯 합니다.
    어쨌든 GOOD~
    Thinkfree 어플리케이션 뜨는 것 보다는 훨 좋아요, ShowFX 언능 공개해주세요!!

    • 워워... 누구신가 했음 -0-;;

      이미지 뜨는건 아마존 웹서비스가 좀 느런거도있고 그래서 더 심각한듯 해욤. 곧 개선될 예정입니다 ㅎㅎ

  2. 사진보고 예전에 왔던 기억이 나네요..ㅎㅎ
    thinkFreedocs 에 올라온 문서뿐 아니라
    웹상의 어떤문서라도 ppt 문서를 바로 변환하여 보여주는건가요. 생각보다 무척 난해한 기술이네요.
    실제 ppt 다운받아서 열어본다고 생각하면 엄청 빠른것 같습니다.

    • thinkfreedocs와 별개로 개발된 독립 어플리케이션이라고 생각하시면 좀 더 정확할듯 합니다^^.

      이 썰렁한 블로그에 답방 감사드려요!

  3. 오~ 너무 좋은데요.
    근데.... 너무 맥분위기 물씬 풍기는 듯한데요 ^^

  4. 미쿡서버에서 땡겨오니 확실히 느리구만.
    야튼 간만에 포스팅 잘 보고 감~ㅋ

구현하기는 귀찮고 이미 예제로 보여진 코드를 봐버려서 계속 기다리던 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하고 연결짓는거였는데 저도 잘 모르다보니 심하게 장황했네요 ㅋㅋ