目次
Basic J2EE Development Using Rational Application Developer (RAD) v6
Web Age Solutions Inc.
Introduction
이번 강좌는 RAD(Rational Application Developer) v6을 이용한 Session EJB, Servlets, JSP개발에 대해 알아보고자 한다.
이제부터 제곱근을 구하는 간단한 Application을 개발할 것이다. 숫자를 입력하지 않거나 음수일 경우에는 에러 페이지를 돌려준다.
Launch and Configure RAD v6
RAD IDE를 기동시킨다.(Start Menu Programs→IBM Rational→IBM Rational Application Developer V6.0→Rational Application Developer).
workspace폴더 위치를 지정하고 ok를 클릭
IDE가 환영페이지를 보여줄 것이다.
오른쪽 아래구석에 Enable/Disable roles아이콘을 클릭한다. 그림에 보이는 Advanced J2EE role을 클릭하면 선택된 역할에 해당되는 메뉴를 보여준다.
Create the Projects
Project Explorer에서 Enterprise Applications에 마우스 오른쪽 클릭후 New→Enterprise Application Project을 선택한다. Project이름으로 Test Application을 입력하고 Show Advanced버튼을 클릭한다.
기본 J2EE level이 1.4이며, Target Server가 Application Server v6.0임을 주목하기 바란다. Target Server는 Project의 Class Path에 추가될 J2EE jar파일들을 결정한다. RAD v6에서는 Test Server가 자동 생성된다.
finish버튼을 클릭한다.
Project Explorer의 EJB Projects에 오른쪽 마우스 클릭후 New→EJB Project을 선택한다. Project Name으로 TestEJB를 입력한다. Show Advanced을 클릭한다. EAR프로젝트로 Test Application을 지정한다.
다음을 클릭한다. 기본으로 지정되어 있는 EJB Client project이름과 jar file이름을 받아들인다.
여기서 EJB client project란 remote/local interface와 이것으로부터 자동 생성된 stub class들의 집합들을 말한다. project는 EJB client application을 compile하고 실행할 최소한의 class들로 이루어져있다.
이제 finish를 클릭한다.
여기서 잠깐 EJB project가 EJB client project의 home interface에 어떻게 접근하는지 짚고 넘어가자. EJB client project는 utility JAR project1)로서 Enterprise application project(예제에서는 Test Application이다.)에 설정되어 있다. EJB project(예제에서는 Test EJB)는 client project에 의존하고 있다.
Project Explorer view에서 Dynamic Web Projects에 오른쪽 클릭 후 New→Dynamic Web Project를 선택한다. Project이름으로 Test Web을 입력하고 Show Advanced버튼을 클릭한다. EAR project로 Test Application을 입력하고 context root를 testweb으로 변경한다.
다음을 클릭한다.
Test_EJBClient.jar에 체크를 하자. EJB client계층(여기서는 Web project)은 client JAR파일에만 의존해야 하며 실제의 EJB JAR파일에 의존해서는 안된다. 여기서 EJB JAR파일은 EJB 모듈이 배포되는 application 서버에만 설치된다. 반면에 client JAR파일은 원하는 서버에 분산되어 배포될 수 있다.
다음을 클릭하자. Features창에서 Struts나 JSTL을 추가할 수도 있다. 하지만 우리의 간단한 application은 추가 feature를 필요로 하지 않는다. Finish버튼을 클릭하고 Confirm Perspective Switch 대화창에서 No를 클릭한다.
Build the Model Layer
우리의 Model계층은 매우 간단하다. 제곱근의 계산결과를 담을 JavaBean을 만들것이다.또한 비지니스 로직을 담당하는 EJB session bean을 작성할 것이다.
여기서 JavaBean은 DTO(Data Transfer Object)이다. EJB계층과 Client계층에서 이 DTO클래스에 접근하게 될 것이다. 소규모 application의 경우에는 EJB client project에 Common 클래스들을 포함시키는 것이 편리하다. client project는 이미 utility JAR project로서 설정되어 있고 EJB와 Web project는 이 프로젝트에 의존하고 있다. 그러므로 client JAR파일은 client계층에만 배포하면 된다. 이보다 더 복잡한 application에서는 공통의 code(utility classes등)를 Java project로서 생성하고 이를 utility JAR projects로 설정하게 된다.
Other Projects를 펼쳐서 Test EJBClient를 마우스 오른쪽 클릭한다. New→Package를 선택한다. package이름으로 com.webage.beans을 입력하고 Finish를 클릭한다. 새로 생성된 package에서 오른쪽 클릭하고 New→Class를 선택한다. Class이름으로 SquareRootResultBean을 입력하고 Finish를 클릭한다. java.io.Serializable interface를 추가하고 아래와 같이 두개의 member변수를 추가한다.
public class SquareRootResultBean implements java.io.Serializable { private double sourceNumber; private double resultValue; }
Source→Generate Getters and Setters를 클릭하여 setter method와 getter method를 생성하고 SquareRootResultBean.java를 저장한다.
이제 session bean을 만들 차례이다. EJB projects→Test EJB를 펼쳐서 Deployment Descriptor:Test EJB를 마우스 오른쪽 클릭한다. 다음으로 New→Enterprise Bean을 선택한다.
생성할 EJB bean 종류로 session bean을 선택한다. bean name으로는 SimpleSession을 입력한다. default package로 com.webage.ejbs을 선택한다. 다음을 클릭한다. 여기서는 기본값(stateless nature and remote interface only)으로 그대로 두고 Finish를 클릭한다.
IDE는 자동으로 EJB를 class diagram에 추가해준다. 저장하고 class diagram을 닫는다.
Test EJB→ejbModule→com.webage.ejbs을 펼친다. SimpleSessionBean.java를 더블 클릭하고 아래와 같이 새 메소드를 추가한다.
public SquareRootResultBean getSuqareRoot(double val) { SquareRootResultBean r = new SquareRootResultBean(); r.setSourceNumber(val); r.setResultValue(Math.pow(val, 0.5)); return r; }
Ctrl+Shift+O를 클릭해서 필요한 package를 import하고 저장, class를 compile한다.
Outline view에서 getSquareRoot메소드를 마우스 오른쪽 click하여 Enterprise Bean→Promote Remote Interface를 선택한다.
이것으로 EJB 개발을 마쳤다. 이제 deployment code를 생성할 차례다. project Explorer view에서 Test EJB를 마우스 오른쪽 클릭하고 Deploy를 선택한다.
Deploy한 후에는 RAD가 자동으로 코드를 생성해 준다. 생성된 client project의 stub class들은 Test EJBClient project에서 확인할 수 있다. 그 이외의 생성된 class는 EJB project에서 확인가능하다.
Unit Test the EJB
Servers view에서 WebSphere Application Server v6.0을 선택해 기동시킨다.2)
서버가 기동되기를 기다리자. console창에 몇가지 에러메세지가 나오더라도 무시하자. server를 오른쪽 클릭해서 Add or Remove Projects를 선택한다. Test Application project를 server에 추가하고 Finish를 클릭한다. project가 배포되는데 1~2초정도 걸린다.
다시 server를 오른쪽 클릭하여 Run universal test client를 선택한다.
JNDI Explorer를 클릭한다. ejb→com→webage→ejbs를 펼쳐서 위의 그림에 보이듯 SimpleSessionHome을 클릭한다.
왼쪽편에 SimpleSession->SimpleSessionHome을 펼쳐서 create()를 클릭한다. Invoke버튼을 클릭하면 remote interface의 reference를 얻어오게 된다. 다음으로 Work with Object버튼을 클릭한다.
왼쪽편에 SimpleSession 1을 펼쳐서 getSquareRoot메소드를 클릭한다.
오른쪽에 메소드 parameter값으로 4.0을 입력하고 Invoke버튼을 클릭한다. 이것으로 SquareRootResultBean Object를 얻어오게 된다. 앞서와 마찬가지로 Work with Object 버튼을 클릭한다.
왼쪽에 Objects->SquareRootResultBean를 펼쳐서 getResultValue()를 클릭한다. Invoke를 클릭한 후 결과값으로 2.0이 돌아오는 것을 확인한다.
model계층 test가 끝났으니 이제 우리는 client계층-Web계층으로의 build단계로 넘어갈 수 있다.
Develop the Controller
Project Explorer view에서 Dynamic Web Prjects→Test Web을 펼친다. Deployment Descriptor:Test Web을 오른쪽 클릭하고 New→Reference를 선택한다.
EJB Reference를 선택하고 Next를 클릭한다.
reference name으로 SimpleSessionRef을 입력하고 위의 그림에 보이듯 SimpleSssion EJB를 선택한다. 이제 Finish를 클릭한다.
Deployment Descriptor : Test Web을 오른쪽 클릭하고 New→Servlet을 선택한다. Servlet name으로 SquareRootServlet을 입력하고 Next을 클릭한다. package name으로 com.webage.servlets을 입력하고 Finish을 클릭한다.
Java Resources->JavaSource->com.webage.servlets을 펼쳐서 SquareRootServlet.java을 더블클릭한다. 밑의 import 구문을 추가한다.
import javax.naming.*; import com.webage.beans.*; import com.webage.ejbs.*;
doGet method의 parameter를 아래와 같이 변경한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet method안에 다음코드를 입력한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { double val = 0.0; String errorMessage = null; try { val = Double.parseDouble(request.getParameter("value")); } catch (NumberFormatException e) { errorMessage = "Please enter a valid number."; } catch (NullPointerException e) { errorMessage = "Please enter a value."; } if (errorMessage != null) { request.setAttribute("errorMessage", errorMessage); request.getRequestDispatcher("/failure.jsp").forward(request, response); return; } try { SimpleSessionHome sh; SimpleSession s; Context ctx = new InitialContext(); Object o = ctx.lookup("java:comp/env/SimpleSessionRef"); sh = (SimpleSessionHome) PortableRemoteObject.narrow(o, SimpleSessionHome.class); s = sh.create(); SquareRootResultBean rb = s.getSuqareRoot(val); request.setAttribute("resultBean", rb); request.getRequestDispatcher("/success.jsp").forward(request, response); } catch (Exception e) { throw new ServletException("doGet failed", e); } }
Ctrl+Shift+O로 import구문을 정리하고 저장한다.
Develop the View
Project Explorer view에서 Test Web을 오른쪽 클릭하고 New→JSP을 선택한다. file name으로 success.jsp을 입력하고 Finish를 클릭한다.
Jsp editor의 Source view로 바꿔서 다음과 같이 <BODY>태그의 내용을 입력한다.3)
<BODY> <P>Square root of ${resultBean.sourceNumber} is ${resultBean.resultValue}.</P> <form action="SquareRootServlet"> Number: <input type="text" name="value"> <input type="submit" value="Calculate"> </form> </BODY>
저장하고 file을 닫는다.
failure.jsp라는 다른 JSP파일을 생성해서 위와 같은 방식으로 <BODY>태그안에 다음내용을 입력한다.
<BODY> <P>${errorMessage}</P> <form action="SquareRootServlet"> Number: <input type="text" name="value"> <input type="submit" value="Calculate"> </form> </BODY>
저장하고 file을 닫는다.
Test the Application
Application을 테스트하기에 앞서 WepSphere v6 test server와 project을 연결시켜야 한다. Test Web project를 오른 쪽 클릭하고 Properties를 선택한 후 Server property를 선택한다.
WebSphere Application Server v6.0를 기본 runtime server로 선택하고 OK를 클릭한다.
Test Web→Deployment Descriptor : Test Web→Servlets을 펼쳐서 SquareRootServlet을 오른쪽 클릭한 후 Run→Run on Server을 선택한다.
error 조건들과 success조건을 Test한다.
Conclusion
In this tutorial, we learned the following items. 이 강좌에서는 다음의 내용을 다루었다.
- RAD v6에서 J2EE projects를 생성하는 방법
- remote interface를 갖는 Session bean을 생성하는 방법
- J2EE application project를 test server에 배포하는 방법
- Session EJB를 unit test(単体テスト)하는 방법
- EJB를 사용하는 Servlet을 개발하는 방법
- Servlet을 unit test(単体テスト)하는 방법