Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51

9.847 visualizaciones

Publicado el

JJUG CCC 2014 Springで実施した R5-1 Eclipse/Liberty Java EEハンズオンのテキストです。説明で使用した資料はこちら→ http://www.slideshare.net/takakiyo/was855-libertyprofile20140518

Publicado en: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51

  1. 1.             JJUG CCC 2014 Spring Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン            
  2. 2.     0.このハンズオンについて このハンズオンでは,Eclipse  と  WAS  Liberty  プロファイルを使用した  Servlet/JDBC  アプリケーション、 CDI  アプリケーションの開発をご紹介します。     Liberty プロファイルとは Liberty プロファイルは,IBM が 2012 年から提供している軽量・高速な新しい Web アプリケーション 実行環境です。Eclipse と連携する Developer  Tools が無償で提供されており,Servlet や JSP の開発 している開発者の方たちにとって,最適なテスト環境として利用することができます。また本番運用にも 耐える高いパフォーマンスと,CI(継続的インテグレーション)ツールなどとの親和性をあわせもってい います。開発者と運用担当者が協調してシステムをつくっていく DevOps を実現するための Java  EE 環 境としても最適です。   Liberty プロファイルは,開発用途であれば無償で使用することができます。またライセンスを購入す ることにより本番環境で使用することもできます。製品に組み込む Java  EE サーバーとして利用する場 合には,一定の条件で無償で利用することもできます。     前提条件 このハンズオンでは以下の環境がセットアップされていることを前提としています。セットアンプが完 了していない方は,講師にご相談ください。   l Java  SE  6 または 7   Liberty プロファイルは,現在出ている最新版の Beta で Java  8 環境に対応していますが,現時点 の正式版では Java  7 環境にまでしか対応していません。このハンズオンでは Beta 版は使用しま せんので,Java  SE 環境としては 6 ないし 7 をご用意ください。   l Eclipse  IDE  for  Java  EE  Developers  (Juno  もしくは  Kepler)   l Liberty  Profile  Developer  Tools および Liberty プロファイル   このハンズオンでは,2014 年 5 月現在最新のバージョンである V8.5.5.2 を使用します。     前提環境のセットアップ方法 Eclipse  IDE  for  Java  EE  Developer は,以下のサイトよりお使いの環境に合ったものをダウンロードし てください。ダウンロードした ZIP/tar.gz ファイルを適当なディレクトリに展開して導入します。   http://www.eclipse.org/downloads/   Eclipse を起動したら,メニューの Help から Eclipse  Marketplace…を選択して Marketplace を起動 します。Find 欄に websphere  liberty を入力して検索すると,検索結果に「IBM  WebSphere   Application  Server  V8.5.5  Liberty  Profile  Developer  Tools  for  Eclipse  Juno  &  Kepler」が表示されます (2014 年 5 月現在のバージョンは V8.5.5.1)。Install ボタンを押して導入を行います。  
  3. 3.     導入が完了し,Eclipse が再起動されたら,Server ビューから右クリックで New で Server を選びます。 New  Server の画面で「WebSphere  Application  Server  V8.5  Liberty  Profile」を選んで Next  >をクリッ クします。     次の画面で download  or  install のリンクをクリックすると,Liberty プロファイルの導入のための画 面があらわれます。導入用 Jar ファイルをすでにダウンロード済みの場合は「Install  a  new  runtime   environment  from  an  archive:」を選択し,Jar ファイルの場所を指定します。ネットワーク経由でダウン ロードを行う場合は,「Download  and  install  a  new  environment  from:」を選択し,V8.5.5.2 を選択し ます。Next  >をクリックします。    
  4. 4.     次の画面では,追加で導入することが可能な Add-­‐on の一覧が表示されます。Liberty プロファイル に JMS や JAX-­‐WS の機能を追加する Extended  Content や各種のサンプルアプリケーションなどを追 加導入することが可能です。必要なものを選んで Next  >をクリックします。     ライセンス条項を Accept して導入先ディレクトリを指定すると,Liberty プロファイル環境の導入がは じまります。導入が完了すると New  Server のダイアログボックスに戻りますので,Next  >をクリックし ます。   サーバー構成を作成する画面が出ますので,デフォルトの構成のまま Finish をクリックします。    
  5. 5.     これで Liberty プロファイルの導入は完了です。Server ビューに作成した Liberty プロファイルのサ ーバーが表示されますので,右クリックで Start を選択してサーバーが正常に起動することを確認して ください。       新規作成される JSP ファイルが,UTF-­‐8 以外になっている場合は,修正しておいてください。 Windows 環境では Window  >  Preference...で,Mac 環境では Eclipse  >  Eclipse についてで設定 のダイアログボックスを開き,Web の JSP  Files で Encoding が UTF-­‐8 になっていることを確認します。 別の文字コードになっていたら,修正してください。      
  6. 6.     1.Simple Web アプリケーションの作成 最初の章では単純な JSP ファイルをもった Web アプリケーションを作成します。また,このアプリケー ションに対して Java  EE セキュリティを使用したアクセス制御をかけ,ユーザー認証を行います。通常, Java  EE セキュリティを使用したアプリケーションは LDAP などを使用してユーザーレポジトリを別途用 意する必要がありますが,Liberty プロファイルでは,簡単にテスト用のユーザーレポジトリを構成する ことができます。   1.  “LabWeb”という名前の動的 Web プロジェクトを作成します。   a. File  >  New  >  Web  Project  を選択します。   b. Name には LabWeb  と記入します。   c. Next をクリックします。   d. Target  Runtime  では、  WebSphere  Application  Server  V8.5  Liberty  Profile  を選択し ます。   e. Add  project  to  an  EAR のチェックを外します。   f. Finish をクリックします。       g. Yes  をクリックし、Web  パースペクティブに切り替えます。     2. 簡単な  JSP を作成します。   a. File  >  New  >  Web  page  を選択します。   b. File  Name に  index.jsp  と入力します。   c.  Finish.  をクリックします。  
  7. 7.         3. Who  Am  I  JSP  を作成します。   a. テキストを置き換えます。   <title>index</title> 以下のように変更します。   <title>Who  Am  I?</title>   b. Body には次のように記述します。   You  are  <%=request.getUserPrincipal().getName()  %>   c. ファイルを保管します。     split  ビューでは、  body  html  は実際の Web ページのように表示されます。     4. アプリケーションのセキュリティ・ロールを構成します。   a. LabWeb  プロジェクトを右クリックします。   b. Java  EE  Tools  >  Generate  Deployment  Descriptor  Stub  を選択します。   c. WebContent  >  WEB-­‐INF  >  web.xml を開きます。   d. Web  Application  (LabWeb) を選択します。   e. Add  をクリックします。   f. Security  Role を選択します。   g. OK をクリックします。  
  8. 8.     h. Role  Name  に  all  と入力します。       i. Web  Application  (Lab  Web)  を選択します。   j. Add  をクリックします。   k. Security  Constraint を選択します。   l. OK をクリックします。   m. role  Name  で Add をクリックします。   n. all と入力します。   o. Transport  Guarantee  に  CONFIDENTIAL を選択します。       p. Web  Resource  Collection を選択します。   q. Web  Resource  Name  の隣に  index  と入力します。   r. URL  Pattern  の隣の Add をクリックします。   s.  /*    と入力します。   t. web.xml を保存します。       5. サーバーのセキュリティを有効化します。   a. Servers  ビューの WebSphere  Application  Server  V8.5  Liberty  Profile.を展開します。   b. Server  Configuration  を右クリックし、Open  を選択します。   c. Feature  Manager(フィーチャー・マネージャー)を選択します。   d. Feature  (フィーチャー)で Add をクリックします。  
  9. 9.     e. appSecurity-­‐2.0  を選択し、OK をクリックます。   認証バインディングが構成されるまでは、どのユーザーもアプリケーションにアクセスできな いことにご注意ください。       6. アプリケーションをデプロイします。   a. LabWeb プロジェクトを右クリックします。   b. Run  As  >  Run  on  Server を選択します。   c. WebSphere  Application  Server  V8.5  Liberty  Profile を選択します。   d. Finish をクリックします。   e. アプリケーションがデプロイされ起動します。Web ブラウザーが開き、次のようなエラーが表 示されます(環境によっては日本語で表示されることもあります)。   Error  403:  Resource  must  be  accessed  with  a  secure  connection  try  again  using  an  HTTPS   connection.     これは、サーバーが SSL を使用するように設定されていないか、または、セキュリティ・ロー ル・バインディングに問題があるために表示されるエラーです。     7. サーバーのセキュリティ・バインディングを構成します。   a. Servers  ビューで、WebSphere  Application  Server  V8.5  Liberty  Profile.  を展開します。   b. Server  Configuration  を右クリックし、Open を選択します。   c. design  タブで Web  Application(Web アプリケーション)を選択し、Add をクリックします。   d. Application  Binding(アプリケーション・バインディング)を選択し、OK をクリックし ます。       e. Add をクリックします。   f. Security  role  (セキュリティ・ロール)を選択し、OK をクリックします。  
  10. 10.     g. Security  role  name(セキュリティー・ロール名)には、all  と入力します。       h. Security  Role  を選択して、Add をクリックします。   i. Special  Subject  (特殊対象)を選択して、OK をクリックします。       j. Special  subject  type  (特殊対象のタイプ)  にて、ALL_AUTHENTICATED_USERS を選択しま す。       k. Feature  Manager(フィーチャー・マネージャー)を選択します。   l. Feature(フィーチャー)で Add をクリックします。  
  11. 11.     m. ssl-­‐1.0  を選択し、OK をクリックします。       n. Server  Configuration  を選択し、Add をクリックします。   o. Keystore  (鍵ストア)を選択し、OK をクリックします。       p. パスワードには mysecret と入力します。   q. サーバー構成を保管します。       8. アプリケーションのテスト用にベーシック・ユーザー・レジストリーを作成します。   a. Server  Configuration  を選択し、Add をクリックします。  
  12. 12.     b. Basic  User  Registry  (基本ユーザー・レジストリ)を選択し、OK をクリックします。       c. Basic  User  Registry    (基本ユーザー・レジストリ)を選択し、Add をクリックします。   d. User を選択します。   e. OK をクリックします。   f. User  name  に、userX と入力します。   g. Password  に、passwordX と入力します。       h. サーバー構成を保管します。     9. アプリケーションの稼動   a. 先程の Web ブラウザーをリフレッシュします。Web ブラウザーのセッションがクローズして いた場合は、コンソール・ビューから次のハイパーリンクをクリックします。 http://localhost:9080/LabWeb     b. 認証されていない証明書の警告が表示されたら、証明書を受け入れてください。  
  13. 13.     c. ユーザーID  userX  とパスワード passwordX    を入力します。       d. JSP は以下を表示するはずです     You are userX    
  14. 14.     2.CDI を使用したアプリケーションの作成 次にこのアプリケーションに対して ToDo リストの表示・追加・削除機能を追加していきます。     1. Entry クラスの作成   a. LabWeb プロジェクトを選択して,File  >  New  >  Class を選択します。   b. Package には jjug.lab.entity,Name には ToDoEntry を入力します。Interfaces の Add...ボタン をクリックして Serializable インターフェースを追加します。       c. Finish ボタンを押します。   d. コードを編集し以下のフィールドを三つ追加します。     private  String  id;     private  String  title;     private  String  detail;     e. OutlineビューでToDoEntryクラスを右クリックし,Source  >  Generate  Constructor  using   Fields...を選びます。  
  15. 15.     f. 三つのフィールドが選択された状態でOKをクリックします。       これにより以下のようなコンストラクタが生成されます。     public  ToDoEntry(String  id,  String  title,  String  detail)  {       super();       this.id  =  id;       this.title  =  title;       this.detail  =  detail;     }     g. ふたたびOutlineビューでToDoEntryを右クリックしSource  >  Generate  Getters  and   Setters...を選択します。Select  Gettersをクリックし,OKをクリックします。三つのGetterが生 成されます。       h. ふたたびOutlineビューでToDoEntryを右クリックしSource  >  Generate  hashCode()  and   equals()をクリックします。    
  16. 16.     i. 最終的にToDoEntryクラスのコードは以下のようになります。     j. 編集内容を保管します。   k. LabWebプロジェクトを選択して,File  >  New  >  Classを選択します。   package  jjug.lab.entity;     import  java.io.Serializable;     public  class  ToDoEntry  implements  Serializable  {     public  ToDoEntry(String  id,  String  title,  String  detail)  {       super();       this.id  =  id;       this.title  =  title;       this.detail  =  detail;     }     private  String  id;     private  String  title;     private  String  detail;     public  String  getId()  {       return  id;     }     public  String  getTitle()  {       return  title;     }     public  String  getDetail()  {       return  detail;     }     @Override     public  int  hashCode()  {       final  int  prime  =  31;       int  result  =  1;       result  =  prime  *  result  +  ((id  ==  null)  ?  0  :  id.hashCode());       return  result;     }     @Override     public  boolean  equals(Object  obj)  {       if  (this  ==  obj)         return  true;       if  (obj  ==  null)         return  false;       if  (getClass()  !=  obj.getClass())         return  false;       ToDoEntry  other  =  (ToDoEntry)  obj;       if  (id  ==  null)  {         if  (other.id  !=  null)           return  false;       }  else  if  (!id.equals(other.id))         return  false;       return  true;     }   }  
  17. 17.     l. Packageにはjjug.lab.entity,NameにはToDoListを入力します。Superclassとして java.util.ArrayList<ToDoEntry>を入力します。       m. Finishをクリックます。   n. ToDoListにidを指定してToDoEntryを消去するメソッドを追加します。以下のようなコードを打 ち込んでください。       o. 編集内容を保管します。     2. CDI によるインジェクションの準備   a. この作成した ToDoList を,アプリケーション内から CDI によって利用できるように構成しま す。   package  jjug.lab.entity;     import  java.util.ArrayList;   import  java.util.Iterator;     public  class  ToDoList  extends  ArrayList<ToDoEntry>  {     public  void  removeToDo(String  id)  {       Iterator<ToDoEntry>it  =  this.iterator();       while  (it.hasNext())  {         ToDoEntry  entry  =  it.next();         if  (entry.getId().equals(id))  {           it.remove();         }       }     }   }  
  18. 18.     b. ToDoList の class 定義の直前で,@appl と入力した状態で Ctrl+スペースをおしてコンテ ンツアシストを起動し,javax.enterprise.context パッケージの@ApplicaitonScoped のアノ テーションを追加します。これによって,アプリケーション内には ToDoList のインスタンス が一つ作られ,アプリケーション全体で共有されるようになります。       c. 同様にコンテンツアシストを使用して,javax.injectパッケージの@Namedアノテーションを 追加します。       d. 以下のように追記してtodolistという名前でインジェクションできるように指定します。     @ApplicationScoped     @Named("todolist")     public  class  ToDoList  extends  ArrayList<ToDoEntry>  {     e. 編集内容を保管します。   f. LabWeb プロジェクトで右クリックして Properties を表示します。  
  19. 19.     g. Project  Facets で Context  and  dependency  injection  (CDI)にチェックを入れます。       h. OK を押します。   i. Liberty プロファイルのサーバー構成に CDI のフィーチャーを追加するか聞いてくることが あります。この場合は Yes をクリックします。       j. プロジェクトを確認すると WebContent の WEB-­‐INF ディレクトリに beans.xml というファイ ルが追加されています。CDI  1.0 では,プロジェクトにこのファイルがあると CDI が利用可 能になります。     3. 表示画面の作成   a. ToDo のリストを表示する画面を JSP を用いて作成します。前章で作成した index.jsp を開 いて編集します。   b. 以下のコードを入力します。@taglibでJSTL(JSP  Standard  Tag  Library)のcore機能の使用 を宣言しています。#{todolist}というEL式で,先ほど作成したToDoListをCDIによって名前 で取得しています。c:forEachで繰り返す各行では,EL式で値を表示し,また項目を削除す るためのサーブレット呼び出しのリンクを追加してあります。     <%@taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>   <table  border="1">     <tbody>     <tr>       <th>Title</th>       <th>Detail</th>       <th>Operation</th>     </tr>     <c:forEach  var="todo"  items="#{todolist}">     <tr>       <td>${todo.title}</td>  
  20. 20.         <td>${todo.detail}</td>       <td>         <form  method="POST"  action="RemoveEntry">           <input  type="hidden"  name="id"  value="${todo.id}"  />           <input  type="submit"  value="Done"  />         </form>       </td>     </tr>     </c:forEach>     </tbody>   </table>   a. その後に項目を追加するサーブレットを呼び出す form を追記します。 <form  method="POST"  action="AddEntry">     <label>Title</label><input  type="text"  name="title"  size="10"  />     <label>Detail</label><input  type="text"  name="detail"  size="20"  />     <input  type="submit"  name="submit"  value="Add  New  Schedule"  />   </form>     c. 編集内容を保管します。
  21. 21.     index.jspの内容は,最終的に以下のようになります。 4. ToDo 項目を追加・削除するサーブレットの追加   b. 項目を追加するサーブレットを作成します。LabWeb プロジェクトを選択した状態で File  >   New  >  Servlet を選びます。   <%@  page  language="java"  contentType="text/html;  charset=UTF-­‐8"          pageEncoding="UTF-­‐8"%>   <!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>Who  am  I</title>   </head>   <body>   You  are  <%=request.getUserPrincipal().getName()  %>     <%@  taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>   <table  border="1">     <tbody>     <tr>       <th>Title</th>       <th>Detail</th>       <th>Operation</th>     </tr>     <c:forEach  var="todo"  items="#{todolist}">     <tr>       <td>${todo.title}</td>       <td>${todo.detail}</td>       <td>         <form  method="POST"  action="RemoveEntry">           <input  type="hidden"  name="id"  value="${todo.id}"  />           <input  type="submit"  value="Done"  />         </form>       </td>     </tr>     </c:forEach>     </tbody>   </table>     <form  method="POST"  action="AddEntry">     <label>Title</label><input  type="text"  name="title"  size="10"  />     <label>Detail</label><input  type="text"  name="detail"  size="20"  />     <input  type="submit"  name="submit"  value="Add  New  Schedule"  />   </form>     </body>   </html>  
  22. 22.     c. Java  Package として jjug.lab を,Class  Name として AddEntryServlet を入力します       d. Next  >をクリックします。   e. URL  Mappings を選択し,Edit...ボタンをクリックし/AddEntry に修正します。       f. Next    >をクリックします。   g. doGet のチェックをはずし,doPost にだけチェックを入れた状態にします。    
  23. 23.     h. Finish をクリックします。     i. サーブレットクラス AddEntryServlet のフィールドとして以下の二行を追加します。Ctrl+ス ペースでコンテンツアシストを利用し,javax.inject.Inject および jjug.lab.ToDoList の import 文を追加します。          @Inject          ToDoList  toDoList;   この記述により CDI によってインスタンスが作成されてフィールドにインジェクションされま す。 j. doPost メソッドを編集し,以下のコードを追加します。id として現在時刻を使用し,title と detail をリクエスト・パラメーターから取得しています。新しい ToDoEntry を作成し ToDoList に追加しています。最後に RequestDispatcher を使用して index.jsp に表示を委 譲しています。 protected  void  doPost(HttpServletRequest  request,         HttpServletResponse  response)       throws  ServletException,  IOException   {     request.setCharacterEncoding("UTF-­‐8");   String  id  =  Long.toString(System.currentTimeMillis());   String  title  =  request.getParameter("title");   String  detail  =  request.getParameter("detail");     ToDoEntry  newToDo  =  new  ToDoEntry(id,  title,  detail);   toDoList.add(newToDo);   RequestDispatcher  rd  =  request.getRequestDispatcher("index.jsp");   rd.forward(request,  response);   } a. 編集内容を保管します。   b. 引き続きエントリの削除を行うサーブレットを作成します。LabWeb プロジェクトを選択した 状態で File  >  New  >  Servlet を選びます。   c. Java  Package として jjug.lab を,Class  Name として RemoveEntryServlet を入力します。 d. Next  >をクリックします。   e. URL  Mappings を選択し,Edit...ボタンをクリックし/RemoveEntry に修正します。 f. Next    >をクリックします。   g. doGet のチェックをはずし,doPost にだけチェックを入れた状態にします。 h. Finish をクリックします。 i. サーブレットクラス RemoveEntryServlet のフィールドとして以下の二行を追加します。コン テンツアシストを利用し,  import 文を追加します。          @Inject          ToDoList  toDoList;
  24. 24.     j. doPost メソッドを編集し,以下のコードを追加します。     protected  void  doPost(HttpServletRequest  request,         HttpServletResponse  response)       throws  ServletException,  IOException   {     request.setCharacterEncoding("UTF-­‐8");   String  id  =  request.getParameter("id");     toDoList.removeToDo(id);         RequestDispatcher  rd  =  request.getRequestDispatcher("index.jsp");   rd.forward(request,  response);   }   k. 編集内容を保管します。   5. アプリケーションの実行   a. LabWeb プロジェクトを右クリックします。   b. Run  As  >  Run  on  Server を選択します。   c. WebSphere  Application  Server  V8.5  Liberty  Profile を選択します。   d. Finish をクリックします。   e. ログインすると,以下のような画面が表示されるはずです。       f. Title および Detail に適当な内容を入力して Add  New  Schedule をクリックしてみてくだ さい。     6. CDI のスコープを変更してみる   a. Basic  User  Repository(基本ユーザー・レジストリ)に別ユーザーを追加します。Servers  ビ ューで、WebSphere  Application  Server  V8.5  Liberty  Profile.  を展開します。   b. Server  Configuration  を右クリックし、Open を選択します。   c. design  タブで Basic  User  Repository(基本ユーザー・レジストリ)を選択し Add...をクリ ックします。   d. User を選択し,OK をクリックします。User  name  に,userY と入力します。Password  に、 passwordY と入力します。  
  25. 25.     e. サーバー構成を保管します。変更はサーバーを再起動することなく即座に反映されます。   f. Eclipse 上のブラウザ画面とは別にブラウザを起動し,それぞれ別ユーザー (userX/userY)でログインします。   g. 画面を交互に操作して,同一の ToDo リストが共有されていることを確認します。   h. ToDoList の Java ソース画面を開き,ApplicationScoped を SessionScoped に変更します (import 文とアノテーションの二カ所)。編集内容を保管します。   i. ふたたび Eclipse 上のブラウザ画面と別ブラウザからそれぞれ別のユーザーでログインし て交互に操作します。ユーザーのセッションごとに,異なる ToDo リストが割り当てられてい ることがわかります。     この章の内容が終わったら,いくつかの ToDo エントリを追加した状態で Liberty プロファイルのサー バーを停止して,再起動してください。再度アクセスすると,ToDo エントリは全て消えていることがわか ります。これは,現在のアプリケーションではデータをメモリ上に保持しているだけであるからです。   次章では,アプリケーションの保持しているエントリをデータベースを使って永続化してみます。    
  26. 26.     3.JDBC を使用したデータベースへのアクセス   JDBC Driver の構成 データベースにアクセスするための JDBC  Driver を Liberty プロファイルに定義します。ここでは, Java の組み込み DB である Derby を使用します。Java  SE  7 の JDK には,標準で Derby の Jar ファイ ルが添付されています。   a. Enterprise  Explorer ビューで WebSphere  Application  Server  V8.5  Liberty  Profile を開 き,shared  >  resources のしたに New  >  Folder で derby という新しいフォルダーを作成 します。       b. 導入されている Java  SE の JDK 環境に,db というディレクトリを探します。そのなかの lib と いうディレクトリの中に derby.jar というファイルがあります。エクスプローラー/Finder で, その derby.jar ファイルを,上で作ったフォルダーにドラッグ&ドロップでコピーします。       derby.jar が存在していない場合には,講師にご相談ください。     c. Servers  ビューで、WebSphere  Application  Server  V8.5  Liberty  Profile.  を展開します。   d. Server  Configuration  を右クリックし、Open を選択します。   e. design タブで Server  Configuration を選択して Add...をクリックし,JDBC  Driver(JDBC ド ライバー)を選択します。  
  27. 27.     f. サーバーに jdbc のフィーチャーを追加するか尋ねるダイアログボックスがでたら,OK をク リックします。       g. JDBC ドライバーの構成画面で ID に derbyDriver と入力し,共有ライブラリ参照の Add を クリックします。       h. JDBC ドライバーの下に共有ライブラリが作成されます。ファイル・セット参照の Add をク リックします。       i. 共有ライブラリのしたにファイル・セットが作成されます。ベース・ディレクトリーの Browse...をクリックします。      
  28. 28.     j. shread.resource.dir を選ぶと上で作成した derby フォルダーが確認できます。これを選 択して OK を押します。       k. 組み込むパターンで Browse...をクリックすると先ほどコピーした derby.jar が表示されま すので,選択して OK を押します。これで derby.jar を使用した JDBC ドライバーの定義が 完了しました。       データ・ソースの構成 前章で作成した JDBC  Driver を使用してデータ・ソースを構成します。   a. Server  Configuration を選択して Add...をクリックし,データ・ソースを選択します。  
  29. 29.     b. JNDI 名に jdbc/derbyDS と入力します。JDBC ドライバー参照の横の▼でプルダウンをだ すと,先ほど定義した derbyDriver が表示されますので,これを選択します。       c. データ・ソース:jdbc/derbyDS を選択した状態で Add...をクリックし,Derby  Embedded のプロパティを選択します。   d. データベースの作成を create に,データベース名を${server.config.dir}/derbyDS に設定 します。これにより,server.xml がおいてあるサーバー構成ディレクトリに derbyDS という ディレクトリが作成され,ここにデータベースファイルが格納されるようになります。       この章で構成したように,Liberty プロファイルの構成ディレクトリ(usr ディレクトリ)以下に各種リソー スやドライバーなどを配置し,相対ディレクトリとして構成を作成することで,サーバーをパッケージして 他の環境に移動することが容易にできるようになります。     Listener の作成 データベースへの読み書きは,Listener および Filter を作成し,その中で行うことにします。  
  30. 30.     a. LabWeb プロジェクトを選択し New  >  Listner を選択します。   b. Java  Package として jjug.lab,Class  Name として LabWebInitializer を入力して Next  >を クリックします。   c. Session  context  events の Lifecycle にチェックを入れます。       d. Finish をクリックします。   e. 作成されたソースファイルを編集します。アノテーションのついたDataSourceフィールドを追 加し,contextInitializedメソッドを以下のように実装します。            @Resource(name  =  "jdbc/derbyDS")          DataSource  ds;                            public  void  contextInitialized(ServletContextEvent  arg0)  {             String  sql  =  "create  table  todo  (  "                 +  "id  varchar(50)  not  null  primary  key,  "                 +  "title  varchar(99),  "                 +  "detail  varchar(999),  "                 +  "userid  varchar(99))";             try  {               Connection  conn  =  ds.getConnection();               conn.prepareStatement(sql).executeUpdate();               conn.close();             }  catch  (Exception  e)  {}          }     f. LabWeb プロジェクトを選択し New  >  Filter を選択します。   g. Java  Package として jjug.lab,Class  Name として LabWebFilter を入力して Next  >をクリ ックします。  
  31. 31.     h. デフォルトの Filter  mappings を選択して Edit...をクリックし/*に修正します。       i. Finish をクリックします。   j. 作成された LabWebFilter に以下のようにコードを実装します。       @Inject   ToDoList  toDoList;     @Resource(name  =  "jdbc/derbyDS")   DataSource  ds;     public  void  doFilter(ServletRequest  request,             ServletResponse  response,  FilterChain  chain)       throws  IOException,  ServletException  {     HttpServletRequest  hrequest  =  (HttpServletRequest)request;     String  userId  =  hrequest.getUserPrincipal().getName();     HttpSession  session  =  hrequest.getSession();     if  (session.isNew())  {       queryDB(userId);     }     int  s  =  toDoList.size();     chain.doFilter(request,  response);     if  (toDoList.size()  !=  s)  {       updateDB(userId);     }   }  
  32. 32.         アプリケーションのテスト 先ほどと同じようにアプリケーションにアクセスしてみてください。いくつか ToDo エントリを追加したあ と,Liberty プロファイルを再起動してください。再度アクセスした場合も,以前のエントリが保持されて いることがわかります。     この章では JDBC を直接使用したため,SQL を含んだ複雑なコーディングを必要としました。JPA(Java   Persistence  API)を使用すると,Java オブジェクトのデータベースへの永続化を,より簡潔な形で記述 することができます。   JPA を使用したアプリケーションの例は,IBM の技術サイト developerWorks の連載で取り上げてい く予定です。   private  void  queryDB(String  userId)  {     String  sql  =  "select  id,title,detail  from  todo  where  userid  =  ?";     try  {       Connection  conn  =  ds.getConnection();       PreparedStatement  pstat  =  conn.prepareStatement(sql);       pstat.setString(1,  userId);       ResultSet  rs  =  pstat.executeQuery();       while  (rs.next())  {         String  id  =  rs.getString("id");         String  title  =  rs.getString("title");         String  detail  =  rs.getString("detail");         toDoList.add(new  ToDoEntry(id,  title,  detail));       }       conn.close();     }  catch  (SQLException  e)  {e.printStackTrace();}   }     private  void  updateDB(String  userId)  {     String  sql1  =  "delete  from  todo  where  userid  =  ?";     String  sql2  =  "insert  into  todo  values  (?,  ?,  ?,  ?)";     try  {       Connection  conn  =  ds.getConnection();       PreparedStatement  pstat  =conn.prepareStatement(sql1);       pstat.setString(1,  userId);       pstat.executeUpdate();       pstat  =  conn.prepareStatement(sql2);       for  (ToDoEntry  e  :  toDoList)  {         pstat.setString(1,  e.getId());         pstat.setString(2,  e.getTitle());         pstat.setString(3,  e.getDetail());         pstat.setString(4,  userId);         pstat.executeUpdate();       }       conn.close();     }  catch  (SQLException  e)  {e.printStackTrace();}   }  

×