SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
 
	
  
	
  
	
  
	
  
	
  
JJUG CCC 2014 Spring
Eclipse と Liberty プロファイルで始める
Java EE 開発ハンズオン
	
  
	
  
	
  
	
  
	
  
	
  
 
	
  
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 ボタンを押して導入を行います。	
  
 
	
  
導入が完了し,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	
  >をクリックします。	
  
	
  
 
	
  
次の画面では,追加で導入することが可能な Add-­‐on の一覧が表示されます。Liberty プロファイル
に JMS や JAX-­‐WS の機能を追加する Extended	
  Content や各種のサンプルアプリケーションなどを追
加導入することが可能です。必要なものを選んで Next	
  >をクリックします。	
  
	
  
ライセンス条項を Accept して導入先ディレクトリを指定すると,Liberty プロファイル環境の導入がは
じまります。導入が完了すると New	
  Server のダイアログボックスに戻りますので,Next	
  >をクリックし
ます。	
  
サーバー構成を作成する画面が出ますので,デフォルトの構成のまま Finish をクリックします。	
  
	
  
 
	
  
これで Liberty プロファイルの導入は完了です。Server ビューに作成した Liberty プロファイルのサ
ーバーが表示されますので,右クリックで Start を選択してサーバーが正常に起動することを確認して
ください。	
  
	
  
	
  
新規作成される JSP ファイルが,UTF-­‐8 以外になっている場合は,修正しておいてください。
Windows 環境では Window	
  >	
  Preference...で,Mac 環境では Eclipse	
  >	
  Eclipse についてで設定
のダイアログボックスを開き,Web の JSP	
  Files で Encoding が UTF-­‐8 になっていることを確認します。
別の文字コードになっていたら,修正してください。	
  
	
  
	
  
 
	
  
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.	
  をクリックします。	
  
 
	
  
	
  
	
  
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 をクリックします。	
  
 
	
  
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 をクリックします。	
  
 
	
  
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 をクリックします。	
  
 
	
  
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 をクリックします。	
  
 
	
  
m. ssl-­‐1.0	
  を選択し、OK をクリックします。	
  
	
  
	
  
n. Server	
  Configuration	
  を選択し、Add をクリックします。	
  
o. Keystore	
  (鍵ストア)を選択し、OK をクリックします。	
  
	
  
	
  
p. パスワードには mysecret と入力します。	
  
q. サーバー構成を保管します。	
  
	
  
	
  
8. アプリケーションのテスト用にベーシック・ユーザー・レジストリーを作成します。	
  
a. Server	
  Configuration	
  を選択し、Add をクリックします。	
  
 
	
  
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. 認証されていない証明書の警告が表示されたら、証明書を受け入れてください。	
  
 
	
  
c. ユーザーID	
  userX	
  とパスワード passwordX	
  	
  を入力します。	
  
	
  
	
  
d. JSP は以下を表示するはずです	
  
	
  
You are userX	
  
	
  
 
	
  
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...を選びます。	
  
 
	
  
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()をクリックします。	
  
	
  
 
	
  
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;	
  
	
   }	
  
}	
  
 
	
  
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();	
  
	
   	
   	
   }	
  
	
   	
   }	
  
	
   }	
  
}	
  
 
	
  
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 を表示します。	
  
 
	
  
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>	
  
 
	
  
	
   	
   <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. 編集内容を保管します。
 
	
  
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>	
  
 
	
  
c. Java	
  Package として jjug.lab を,Class	
  Name として AddEntryServlet を入力します	
  
	
  
	
  
d. Next	
  >をクリックします。	
  
e. URL	
  Mappings を選択し,Edit...ボタンをクリックし/AddEntry に修正します。	
  
	
  
	
  
f. Next	
  	
  >をクリックします。	
  
g. doGet のチェックをはずし,doPost にだけチェックを入れた状態にします。	
  
	
  
 
	
  
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;
 
	
  
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 と入力します。	
  
 
	
  
e. サーバー構成を保管します。変更はサーバーを再起動することなく即座に反映されます。	
  
f. Eclipse 上のブラウザ画面とは別にブラウザを起動し,それぞれ別ユーザー
(userX/userY)でログインします。	
  
g. 画面を交互に操作して,同一の ToDo リストが共有されていることを確認します。	
  
h. ToDoList の Java ソース画面を開き,ApplicationScoped を SessionScoped に変更します
(import 文とアノテーションの二カ所)。編集内容を保管します。	
  
i. ふたたび Eclipse 上のブラウザ画面と別ブラウザからそれぞれ別のユーザーでログインし
て交互に操作します。ユーザーのセッションごとに,異なる ToDo リストが割り当てられてい
ることがわかります。	
  
	
  
この章の内容が終わったら,いくつかの ToDo エントリを追加した状態で Liberty プロファイルのサー
バーを停止して,再起動してください。再度アクセスすると,ToDo エントリは全て消えていることがわか
ります。これは,現在のアプリケーションではデータをメモリ上に保持しているだけであるからです。	
  
次章では,アプリケーションの保持しているエントリをデータベースを使って永続化してみます。	
  
	
  
 
	
  
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 ド
ライバー)を選択します。	
  
 
	
  
f. サーバーに jdbc のフィーチャーを追加するか尋ねるダイアログボックスがでたら,OK をク
リックします。	
  
	
  
	
  
g. JDBC ドライバーの構成画面で ID に derbyDriver と入力し,共有ライブラリ参照の Add を
クリックします。	
  
	
  
	
  
h. JDBC ドライバーの下に共有ライブラリが作成されます。ファイル・セット参照の Add をク
リックします。	
  
	
  
	
  
i. 共有ライブラリのしたにファイル・セットが作成されます。ベース・ディレクトリーの
Browse...をクリックします。	
  
	
  
	
  
 
	
  
j. shread.resource.dir を選ぶと上で作成した derby フォルダーが確認できます。これを選
択して OK を押します。	
  
	
  
	
  
k. 組み込むパターンで Browse...をクリックすると先ほどコピーした derby.jar が表示されま
すので,選択して OK を押します。これで derby.jar を使用した JDBC ドライバーの定義が
完了しました。	
  
	
  
	
  
データ・ソースの構成
前章で作成した JDBC	
  Driver を使用してデータ・ソースを構成します。	
  
a. Server	
  Configuration を選択して Add...をクリックし,データ・ソースを選択します。	
  
 
	
  
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 を作成し,その中で行うことにします。	
  
 
	
  
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	
  >をクリ
ックします。	
  
 
	
  
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);	
  
	
   }	
  
}	
  
 
	
  
	
  
	
  
アプリケーションのテスト
先ほどと同じようにアプリケーションにアクセスしてみてください。いくつか 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();}	
  
}	
  

Mais conteúdo relacionado

Mais procurados

Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築gree_tech
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介オラクルエンジニア通信
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)NTT DATA Technology & Innovation
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)NTT DATA Technology & Innovation
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611樽八 仲川
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門樽八 仲川
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13Amazon Web Services Japan
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 

Mais procurados (20)

Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Metaspace
MetaspaceMetaspace
Metaspace
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
AWS Black Belt Techシリーズ Amazon VPC
AWS Black Belt Techシリーズ Amazon VPCAWS Black Belt Techシリーズ Amazon VPC
AWS Black Belt Techシリーズ Amazon VPC
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 

Destaque

IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-Takakiyo Tanaka
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...Takakiyo Tanaka
 
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?Takakiyo Tanaka
 
Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-IBMソリューション
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-Takakiyo Tanaka
 
Amazon Aurora 最新アップデートと日本のお客様の移行事例
Amazon Aurora 最新アップデートと日本のお客様の移行事例Amazon Aurora 最新アップデートと日本のお客様の移行事例
Amazon Aurora 最新アップデートと日本のお客様の移行事例Amazon Web Services Japan
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShellAmazon Web Services Japan
 

Destaque (9)

IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...
JJUG CCC 2015 Spring: Liberty Profile Technical Deepdive:IBMの新しいアプリケーションサーバーの...
 
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
 
Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-
 
AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
Amazon Aurora 最新アップデートと日本のお客様の移行事例
Amazon Aurora 最新アップデートと日本のお客様の移行事例Amazon Aurora 最新アップデートと日本のお客様の移行事例
Amazon Aurora 最新アップデートと日本のお客様の移行事例
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 

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

ネットワーク第5回
ネットワーク第5回ネットワーク第5回
ネットワーク第5回Yukiko Kato
 
[Ps11]ネットワーク第4回
[Ps11]ネットワーク第4回[Ps11]ネットワーク第4回
[Ps11]ネットワーク第4回Yukiko Kato
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書Masaki Takeda
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
IBM Eclipse tools for Bluemix の構成手順
IBM Eclipse tools for Bluemix の構成手順IBM Eclipse tools for Bluemix の構成手順
IBM Eclipse tools for Bluemix の構成手順Hiroaki Komine
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発normalian
 
Cloud Foundry x Wagby
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x WagbyYoshinori Nie
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定Enpel
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンJAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンKana SUZUKI
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~de:code 2017
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideYusuke Tochigi
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 日本マイクロソフト株式会社
 
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Masaki Takeda
 

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

ネットワーク第5回
ネットワーク第5回ネットワーク第5回
ネットワーク第5回
 
[Ps11]ネットワーク第4回
[Ps11]ネットワーク第4回[Ps11]ネットワーク第4回
[Ps11]ネットワーク第4回
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
IBM Eclipse tools for Bluemix の構成手順
IBM Eclipse tools for Bluemix の構成手順IBM Eclipse tools for Bluemix の構成手順
IBM Eclipse tools for Bluemix の構成手順
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
 
Cloud Foundry x Wagby
Cloud Foundry x WagbyCloud Foundry x Wagby
Cloud Foundry x Wagby
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンJAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオン
 
Alfresco CI
Alfresco CIAlfresco CI
Alfresco CI
 
20050903
2005090320050903
20050903
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
20090328
2009032820090328
20090328
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
 

Mais de Takakiyo Tanaka

Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyTakakiyo Tanaka
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」Takakiyo Tanaka
 
MicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyMicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyTakakiyo Tanaka
 
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについてオープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM JavaについてTakakiyo Tanaka
 
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築Takakiyo Tanaka
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Takakiyo Tanaka
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4Takakiyo Tanaka
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発Takakiyo Tanaka
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 Takakiyo Tanaka
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57Takakiyo Tanaka
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Takakiyo Tanaka
 

Mais de Takakiyo Tanaka (13)

Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere Liberty
 
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」
 
OutOfMemoryErrorとは
OutOfMemoryErrorとは OutOfMemoryErrorとは
OutOfMemoryErrorとは
 
MicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open LibertyMicroProfile Starterで簡単スタート Open Liberty
MicroProfile Starterで簡単スタート Open Liberty
 
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについてオープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
オープンソースで提供される第二のJVM:OpenJ9 VMとIBM Javaについて
 
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
自分のDocker/Kubernetes環境を手に入れる ICP Community Editionで簡単構築
 
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
 
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性 #natsumiB4
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発 夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
夏サミ2014 クラウドとCIツールで変わるエンタープライズJava開発
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界
 

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

  • 1.             JJUG CCC 2014 Spring Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン            
  • 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.     導入が完了し,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.     次の画面では,追加で導入することが可能な Add-­‐on の一覧が表示されます。Liberty プロファイル に JMS や JAX-­‐WS の機能を追加する Extended  Content や各種のサンプルアプリケーションなどを追 加導入することが可能です。必要なものを選んで Next  >をクリックします。     ライセンス条項を Accept して導入先ディレクトリを指定すると,Liberty プロファイル環境の導入がは じまります。導入が完了すると New  Server のダイアログボックスに戻りますので,Next  >をクリックし ます。   サーバー構成を作成する画面が出ますので,デフォルトの構成のまま Finish をクリックします。    
  • 5.     これで Liberty プロファイルの導入は完了です。Server ビューに作成した Liberty プロファイルのサ ーバーが表示されますので,右クリックで Start を選択してサーバーが正常に起動することを確認して ください。       新規作成される JSP ファイルが,UTF-­‐8 以外になっている場合は,修正しておいてください。 Windows 環境では Window  >  Preference...で,Mac 環境では Eclipse  >  Eclipse についてで設定 のダイアログボックスを開き,Web の JSP  Files で Encoding が UTF-­‐8 になっていることを確認します。 別の文字コードになっていたら,修正してください。      
  • 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.         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.     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.     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.     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.     m. ssl-­‐1.0  を選択し、OK をクリックします。       n. Server  Configuration  を選択し、Add をクリックします。   o. Keystore  (鍵ストア)を選択し、OK をクリックします。       p. パスワードには mysecret と入力します。   q. サーバー構成を保管します。       8. アプリケーションのテスト用にベーシック・ユーザー・レジストリーを作成します。   a. Server  Configuration  を選択し、Add をクリックします。  
  • 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.     c. ユーザーID  userX  とパスワード passwordX    を入力します。       d. JSP は以下を表示するはずです     You are userX    
  • 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.     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.     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.     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.     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.     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.         <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.     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.     c. Java  Package として jjug.lab を,Class  Name として AddEntryServlet を入力します       d. Next  >をクリックします。   e. URL  Mappings を選択し,Edit...ボタンをクリックし/AddEntry に修正します。       f. Next    >をクリックします。   g. doGet のチェックをはずし,doPost にだけチェックを入れた状態にします。    
  • 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.     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.     e. サーバー構成を保管します。変更はサーバーを再起動することなく即座に反映されます。   f. Eclipse 上のブラウザ画面とは別にブラウザを起動し,それぞれ別ユーザー (userX/userY)でログインします。   g. 画面を交互に操作して,同一の ToDo リストが共有されていることを確認します。   h. ToDoList の Java ソース画面を開き,ApplicationScoped を SessionScoped に変更します (import 文とアノテーションの二カ所)。編集内容を保管します。   i. ふたたび Eclipse 上のブラウザ画面と別ブラウザからそれぞれ別のユーザーでログインし て交互に操作します。ユーザーのセッションごとに,異なる ToDo リストが割り当てられてい ることがわかります。     この章の内容が終わったら,いくつかの ToDo エントリを追加した状態で Liberty プロファイルのサー バーを停止して,再起動してください。再度アクセスすると,ToDo エントリは全て消えていることがわか ります。これは,現在のアプリケーションではデータをメモリ上に保持しているだけであるからです。   次章では,アプリケーションの保持しているエントリをデータベースを使って永続化してみます。    
  • 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.     f. サーバーに jdbc のフィーチャーを追加するか尋ねるダイアログボックスがでたら,OK をク リックします。       g. JDBC ドライバーの構成画面で ID に derbyDriver と入力し,共有ライブラリ参照の Add を クリックします。       h. JDBC ドライバーの下に共有ライブラリが作成されます。ファイル・セット参照の Add をク リックします。       i. 共有ライブラリのしたにファイル・セットが作成されます。ベース・ディレクトリーの Browse...をクリックします。      
  • 28.     j. shread.resource.dir を選ぶと上で作成した derby フォルダーが確認できます。これを選 択して OK を押します。       k. 組み込むパターンで Browse...をクリックすると先ほどコピーした derby.jar が表示されま すので,選択して OK を押します。これで derby.jar を使用した JDBC ドライバーの定義が 完了しました。       データ・ソースの構成 前章で作成した JDBC  Driver を使用してデータ・ソースを構成します。   a. Server  Configuration を選択して Add...をクリックし,データ・ソースを選択します。  
  • 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.     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.     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.         アプリケーションのテスト 先ほどと同じようにアプリケーションにアクセスしてみてください。いくつか 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();}   }