Stripes 가 워낙 편해서 왠간하면 잘 쓸라했는데, 다른 WAS 는 잘 돌아가는데 꼭 웹로직과는 문제가 생긴다.

지금까지 내가 발견했던 악성 궁합은 이렇다. 대체로 문제가 발생하는 것은 레이아웃 기능을 사용하면 그렇다. 하지만 레이아웃 기능을 뺀 스트라이프트는 스트라이프가 아니지-_-;; (물론 빼도 쓸만하지만, 너무 매력적이지..음)

 

 WAS Stripes 버젼  내용 

 Weblogic 10.0

1.5.3 

레이아웃 고급 기능이 제대로 동작안한다. 1.5.4 에서는 패치되었다. 

- Layout break

- Fixed 1.5.4

 Weblogic 11g(10.3.5)

1.5.4 

화면이 안나온다. 

- No Visible

 Weblogic 12c

1.5.6 

레이아웃이 이상하게 나온다. 1.5.7-SNAPSHOT 에서는 수정되었다.

- Fixed 1.5.7-SNAPSHOT

 Weblogic 12c

1.5.7-SNAPSHOT 

수정된 줄 알았으나, 이슈 트래커에는 수정된 것으로 나온다. 하지만, 일부 페이지에는 화면이 안 나오는 부분이 있다.

* 현재 다른 원인이 있는지 제가 그 원인을 찾고 있는 중입니다.:)

- Fixed 1.5.7-SNAPSHOT???

 Jeus 5.x 1.5.4 

레이아웃 사용시 동적 속성을 String 외에 사용할 수 없다.  

* 이 부분은 제우스가 표준을 안 지킨 것인지, 다른 WAS 가 기능이 더 좋아서 그런것인지는 불분명하다.

- Can't use dynamic attribute for Layout

 Jeus 6.x

1.5.7-SNAPSHOT 

web.xml 에서 welocme page 로 등록된 페이지에 접근시('/' 으로 접근시), Stripes  Filter 를 통과하지 못한다.

- Incorrect Weblcome Page

 Tomcat 6.x

1.5.3 ~ 1.5.7-SNAPSHOT 

Good 
 Jetty

1.5.3 ~ 1.5.7-SNAPSHOT

Good 

 Websphere 8.0

1.5.6  Good 

 

톰캣은 아주 좋다. 개발자가 톰캣만 테스트만 하나보다.

여튼 1.6.0 도 기대해보지만, 과연 나오긴 할 것인지..

Stripes 마지막 릴리즈가 1년전이다. -_-;

 

그래서 직접 Stripes 소스를 분석해 커미터가 되어볼까, 아니면 그냥 다른 사람들 많이 쓰는 Spring Web MVC 조합으로 바꿔버릴까,

 

 

지금까지 jboss 등등 유명한 오픈소스들의 리파지토리를 넥서스에 직접 등록해서 사용하고 있었는데, 그럴 필요가 없었다. 이미 Sonatype 에서 다 모아서 서비스를 해주고 있었던 것-_-;


Sonatype 에서 제공하는 오픈소스용 Nexus 는 https://oss.sonatype.org/index.html 여기로 접속 가능하다.

그리고 릴리즈용과 스냅샷용 리파지터리는 다음과 같다.

  • https://oss.sonatype.org/content/repositories/releases/
  • https://oss.sonatype.org/content/repositories/snapshots/
스트라이프 소스 받아다가 할려고보니깐, parent 로 소나타입이 지정되있는걸 보고 깨달았다. 아.. 설마

<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>5</version>
</parent>

여튼, 소나타입 덕분에 살맛 난다.. 감사감사..
그나저나 Java 8 이 나오면 maven 망하나? 

1.5.3이 나온지 일년이 지나서야 1.5.4 가 릴리즈 되었다.
그동안 사이트에 어떤 글도 올라오지 않아 스트라이프 망한줄 알았다.
 사실 2010년 11월에 릴리즈 되었으니, 내 포스팅도 굉장히 늦은 감은 있긴 하지만 여튼 변경된게 무언지 알아보자

Change Log

체인지 로그에 보면 추가된 사항은 다음과 같다. [체인지 로그 확인]

  • STS-678 : DynamicMappingFilter fails with "Could not get a reference to StripesFilter" on WAS 6.1
  • STS-762 : Eliminate UrlBindingFactory.getInstance() from 1.5.x branch
  • STS-767 : Showing an error message when the parameter name is _eventName

몇가지 변경된 사항은 없어보이나 막상 적용해보면 에러가 쏟아진다.
실제로 적용해서 무엇이 변경되었는지 알아보자.

동적 속성용 태그 라이브러리 추가

기존에는 태그 라이브러리 하나로 동적 속성을 지원하였다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="http://stripes.sourceforge.net/stripes.tld" %>
<s:useActionBean beanclass="com.vine.admin_webapp.cm.action.ContentsEditActionBean" var="actionBean" event="read" />
<s:layout-render name="/layout/default.jsp" section="${actionBean.section}">
    <s:layout-component name="pageTitle">컨텐츠 조회</s:layout-component>
    <s:layout-component name="pageDesc"><p>컨텐츠 정보를 조회합니다.</p></s:layout-component>
<s:layout-render/>

1.5.3 까지는 태그에 동적 속성을 사용할 수 있었으나, 1.5.4에는 동적속성용 태그와 표준 태그를 분리하여 사용해야한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="http://stripes.sourceforge.net/stripes.tld" %>
<%@ taglib prefix="d" uri="http://stripes.sourceforge.net/stripes-dynattr.tld" %>
<s:useActionBean beanclass="com.vine.admin_webapp.cm.action.ContentsEditActionBean" var="actionBean" event="read" />
<d:layout-render name="/layout/default.jsp" section="${actionBean.section}">
    <s:layout-component name="pageTitle">컨텐츠 조회</s:layout-component>
    <s:layout-component name="pageDesc"><p>컨텐츠 정보를 조회합니다.</p></s:layout-component>
<d:layout-render/>


더 자세한 것은 다음 링크 참조
http://www.stripesframework.org/display/stripes/Tag+Library+Doc

Layout-component 재사용 변경

레이아웃 페이지에서 중첩된 레이아웃을 사용할 경우 동일 페이지내에 동일 컴포넌트가 존재할 경우 중복 되어 처리된다. 즉,

/layout/default.jsp

<s:layout-render name="/layout/blank.jsp">
  <s:layout-component name="script">
   <script type="text/javascript">
    ${script}
   </script>
  </s:layout-component>
 </s:layout-render>
 <s:layout-render name="/layout/blank.jsp">
  <s:layout-component name="style">
   <style type="text/css">
    ${style}
   </style>
  </s:layout-component>
 </s:layout-render>

 

/layout/blank.jsp

<%@ taglib prefix="s" uri="http://stripes.sourceforge.net/stripes.tld" %>
<s:layout-definition>
 <s:layout-component name="script"></s:layout-component>
 <s:layout-component name="style"></s:layout-component>
</s:layout-definition> 


와 같이 사용할 경우 스크립트 내용이 두번, 스타일부분이 2번 출력이 된다.
따라서 중첩된 컴포넌트를 사용할 경우 컴포넌트의 이름이 중복되지 않도록 다음과 같이 처리해야한다.

변경된 /layout/default.jsp

<s:layout-render name="/layout/blank.jsp">
  <s:layout-component name="script">
   <script type="text/javascript">
    ${script}
   </script>
  </s:layout-component>
<s:layout-component name="style">
   <style type="text/css">
    ${style}
   </style>
  </s:layout-component>
 </s:layout-render>

저의 전공들입니다. 배워도 배워도 끝도 없는 세상. 언제쯤 마무리 지을런지..

오픈 소스, Maven, Hibernate, Spring ,Stripes , Spring, Spring Security, Java,Css,Web 2.0,iBatis,EJB,J2EE,Dojo Toolkit, Prototype.js, Script.aculo.us, jQuery, Trac, Eclipse

 

이젠 저 혼자 아는 것도 외로워서리, Java 개발자라면 Java 개발자다운 세상을 만들어 가보고 싶네요.

궁금한게 있으시다면 질문 언제나 환영입니다. 비록 포스팅은 많이 하지 않지만..;;


Spring

이제 거의 모든 프로젝트에 스프링을 필수 입니다. 물론 스프링 프레임웍이 최고라고 단정할 수 없겠습니다만, 세계적으로 이만한 기반을 쌓아놓았다는 것 자체가 힘입니다.

스프링은 그저 Dependency Injection(Inversion of Control), AOP(Aspect Oriental Programming) 밖에 없습니다. 이2개로 다 해결하죠. 

또한 이놈을 씀으로서 자연스럽게 소스를 구조화시키죠. 스파게티로부터 일단 한단계는 벗어나는겁니다.

묻지 마시고, 일단 이건 시작하십시오.

 

Maven

정말 이놈을 만난 순간 이런 세상에 내가 태어났다는게 참으로 감사했죠. 이놈이 나오기전에 내가 있엇으면 참 얼마나 뻘짓들을 하면서 살았을련지.

Ant 를 대체하며, 태스크 중심이 아닌 프로젝트 빌드에 초점을 맞춘 툴입니다.

전세계의 97% 오픈소스가 Maven 으로 기반으로 되어있다고 합니다.

우리 회사는 오픈 소스 아니니깐 상관없어?

무슨 그런 말씀을..ㅡㅡ;;; Maven 을 도입하고 조금 더 게을러져봅시다. 

Hibernate

오랜 시간동안 하이버네이트를 다뤄왔습니다. 국내에서는 별로 쓰이지도 않음에도 불구하고, 그 매력에 빠져 헤어나오지를 못하네요..^^

이제 하이버네이트에 대한 부담감이 없지만, 초창기에는 국내 커뮤니티가 참으로 작아 힘들었더랬죠.

이젠 제가 여러분에 도움을 드릴 수 있지 않을까 합니다.

 

 

Stripes

스트라이프를 써보셨나요? 들어본 적도 없으시죠?

스트럿츠, 스프링 웹MVC 모두 저리가라입니다. 프레임워크에 학을 때시나요?

현재는 스트라이프가 답일 거라 생각합니다. 이또한 국내 커뮤니티가 전무하군요..

워낙 쉬워서 사실 국내문서화가 얼마나 필요할까 싶기도 합니다만..^^

스트러츠를 갈아버리는 그 날까지 제가 일조를 했으면 하는군요


Prototype.js, jQuery, Dojo Toolkit, Ajax

사실 Ajax 라는 것은 무척쉽습니다. 한줄이면 끝나는 말인걸요.

비동기적으로 서버에 메시지 보내서 받아오는 것

이미 알고 계신가요ㅎㅎ 그저 자바스크립트가 싫을 뿐인거죠? 

이러한 자바스크립트 라이브러리를 사용해 보십시오. 자바 스크립트도 나름 재밌구나라는 생각도 듭니다.

지긋한 스크립트 지옥으로부터 탈출하는 습관을 만들어 줄겁니다.



이 글은 스프링노트에서 작성되었습니다.

스트라이프 버젼이 릴리즈되었다. 사실 나온지 오래되었지만, 그냥 1.5.2 쓰고 있었는데..
웹로직에 업로드햇더니만 에러!-_-;;

찾아보니 패치되었다고 새로 받으란다. 1.5.3에서 변경된 사항은 다음과 같다.
  • 웹로직 10.0 에서 액션빈을 못 찾는 오류
  • 위자드 관련하여서, 첫 페이지에 Submit 버튼이 여러개일 경우 두번재에서 다중 이벤트가 발생하는 현상

빨리 올리자. 
늦게 올리면 또 오픈소스가 그렇지 머라고 하는 사람들 있다. =_=;;
조용히 업글..

스트라이프에서 스프링의 빈을 가져오려면 다음의 설정을 추가해야한다.

web.xml 의 스프링 필터에 스프링 인터셉터를 추가한다.

[web.xml]

<filter>
    <display-name>Stripes Filter</display-name>
    <filter-name>StripesFilter</filter-name>
    <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
    <init-param>
       <param-name>ActionResolver.Packages</param-name>
       <param-value>kr.or.ehc.kg.web</param-value>
    </init-param>
    <init-param>
            <param-name>Interceptor.Classes</param-name>
            <param-value>
                        net.sourceforge.stripes.integration.spring.SpringInterceptor
            </param-value>
     </init-param>
</filter>

 

그리고 액션 리졸버 클래스에서는 @SpringBean 어노테이션으로 스프링 빈을 가져올 수 있다.

public class ArticleAction implements ActionBean {
    ...
    @SpringBean("articleService")
    private ArticleService articleService;
    ...
}

 

물론, 메서드에 어노테이션을 지정할 수 있다. 스프링빈을 가져올 때, 관례적으로 'set스프링빈' 의 형태의 메서드를 취하나, 메서드 보안 관계상 다른 이름으로 주입하는 것도 좋은 방법이다

public class ArticleAction implments ActionBean {
     ...
    private BoardService boardService;
    @SpringBean("boardService")
    public void injectBoardService(BoardService boardService) {
        this.boardService = boardService;
    }

    ...
}


+ Recent posts