SlideShare une entreprise Scribd logo
1  sur  101
Télécharger pour lire hors ligne
クラウド上のサービス開発の新しい動向
 --- JavaEE7とPlay2.0 ---




  @maruyama097
  丸山不二夫
Agenda
   21世紀の最初の10年に起きたこと
   今後の展望とエンタープライズ・クラウドの課題
   JavaEE 7
   Play 2.0
                資料
    A)   GlassfishのService Deploy
    B)   GlassfishのAmazon EC2へのdeploy
    C)   Play 2.0 Template Overview
    D)   Play 2.0 routesファイル サンプル
21世紀の最初の10年に起きたこと


 21世紀の最初の10年が終わった。
 この10年の、特に、この数年のITの世界の変
 化は目覚ましいものがある。
2001/9/11
2011/3/11
21世紀、最初の10年
携帯電話の爆発的普及
90
     21世紀の最初の10年で、
     世界人口の80%が携帯
                                                                                78.59
80



     電話を持ち、30%がイン
                                                                        68.77
70
                                                                60.36
60
     ターネットを利用するよう                                       50.99
                                                                        携帯電話
50
     になった。                                      42.15

40
                                        34.21
                                                                                30.48
                                27.63                                   26.81
30
                        22.47                                   23.55
                                                        20.79
              18.60                             17.67
20                                      15.87
     15.00

     8
             10.62
                      12.32
                                14.15
                                                                インターネット
10


 0
     2001     2002      2003    2004    2005    2006    2007    2008    2009    2010
21世紀、最初の10年
 インターネットの発展とクラウドの登場
90   21世紀初頭、Googleの登場を画期に、
80   コンシューマ向けのインターネット・                                                            78.59



70   クラウドが成立し、その技術は、                                                      68.77



     Amazon,MSにより、エンター   携帯電話
                                                                  60.36
60
                                                          50.99
50   プライズ向けのクラウド                                 42.15

40   として発展した。                            34.21
                                                                                  30.48
                                27.63                                     26.81
30
                        22.47                                     23.55
                                                          20.79
              18.60
                                                                  インターネット
                                                 17.67
20   15.00                               15.87
                                14.15
                      12.32
             10.62
10   8

                                        2006年 Amazon EC2/S3
 0
     2001     2002      2003    2004      2005   2006     2007    2008    2009    2010

                      2004年 Google上場                     2008年 Microsoft Azure
2005年から2010年までの
  世界のトランジスター数の変化




IDF2011 Keynote
より 2011/9/13
2007年-2011年
クラウド・デバイスの登場
90
     21世紀の最初の10年の
     後半で、スマートフォンが
                                                                             78.59
80



     登場し、アメリカでは携帯
                                                                     68.77
70
                                                             60.36
60
     電話全体の30%を占める
                                                                 携帯電話
                                                     50.99
50
     ようになった。                                 42.15

40
                                     34.21

                             27.63
30
                     22.47

20   15.00
             18.60
                                                             スマートフォン
10


 0
     2001    2002    2003    2004    2005    2006    2007    2008    2009    2010



     2007年 iPhone, 2008年 Android
2007年-2011年
クラウド・デバイスの躍進


  21世紀の最初の10年の
  後半で、Android、iPhone
  iPad等のクラウド・デバイス
  の拡大は急速で、PCを上回
  る勢いである。
2011年に起きたこと


 昨年2011年に起きたことを振り返る。
 2011年は、大きな転換点であったと思う。
新しいネットワーク・メディアのインパクト
   2011年1月    チュニジア
                    中近東・北アフリカでの一連の
   2011年2月    エジプト 変化でも、新しいネットワーク・
   2011年3月    リビア  メディアは、大きな役割を果た
                    したと言われている。
   2011年4月    シリア




    2010/02/10 エジプト   2010/04/22 シリア
Apple iCloud
WWDC 2011 6/6-6/10
Facebookユーザー8億人を突破
2011年9月22日 f8




  1日当たりの利用者数、5億人に達する
Amazon Kindle Fire
2011年11月14日
Google Checkoutの
Googleウォレットへの統合          11月18日

 Google ウォレットは、客の支払い情報を安全に
  保存する仮想の財布(ウォレット)で、実店舗でも
  オンラインでも、すばやく支払いを行うことができ
  る。従来のGoogle Checkout は Google ウォ
  レットに統合された。
 2014年までに50%
  のスマートフォンが
  NFCを内蔵するよう
  になるだろう。
  コマース担当副社長
  Stephanie Tilenius
クラウドとクラウド・デバイス
 一年前(2010年)の状況

                   クラウド・
            クラウド           マーケット
                   デバイス
                           iTune/
Apple        ×     ○       AppStore

Google       ○     ○       Android Market


Microsoft    ○     ×
Amazon       ○     ×
Facebook     ×     ×
クラウド+クラウド・デバイスの
 新しいプレーヤの形成 2011年
                   クラウド・
            クラウド           マーケット
                   デバイス
                           iTune/
Apple        ○       ○     AppStore

Google       ○       ○     Android Market


Microsoft    ○       ○     Marketplace


Amazon       ○       ○     Amazon


Facebook     △       △      ?
iPhoneで、AT&Tのトラフィック
3年で50倍に

 ブロードバンドの帯域も、個人によって
 またたく間に、消費される。




        http://bit.ly/1I8Wbd
この間、日本では
  ネットワーク障害があいついだ




http://www.nttdocomo.co.jp/binary/pdf/info/notice/page/120127_00.pdf
この間、日本では
ネットワーク障害があいついだ
今後の展望と
エンタープライズ・クラウドの課題


 これから起きるだろうことを考える。
 新しいネットワーク・メディアの躍進と新しいネ
 ットワーク・マーケットの台頭の二つを軸に変
 化は進んでゆくだろう。こうした視点から、エン
 タープライズ・クラウドの課題を考える。
2010年から2015年までの
  世界のトランジスター数の予想




IDF2011 Keynote
より 2011/9/13
ネットワークへの個人の登場にともなって、
ネットワーク上の情報は、爆発的に増大を続ける。
新しいネットワーク・メディアと
新しいネットワーク・マーケット
 巨大なクラウドと膨大な数のクラウド・デバイ
  スによって、新しいスタイルのコミュニケーショ
  ンと情報の共有、自由時間の享受を可能とす
  るネットワーク・メディアが成立しつつある。こう
  して、旧メディアの没落が始まる。
 いままた、無数の個人のネットワーク利用を背
  景として、クラウドとクラウド・デバイスの連携
  の拡大は、新しいネットワーク上のマーケット、
  新しい経済システムを準備しつつある。
数百万コアが集積した巨大なクラウド




  無数のクラウド・デバイス
コマース市場の拡大
新しいネットワーク・マーケットの成立
 日常の消費行動を含め、全ての経済行動が、
  ネットワーク上で行われるようになる。
 これを担うシステムは、これまでのエンタープ
  ライズ・システムの規模を大きく超えるものに
  なる。システムの規模拡大は必須である。
 全ての処理がリアルタイムで行われる必要は
  ないのだが、コンシューマ向けのクラウド・サ
  ービスとは異なって、そのトランザクション処理
  には、いくつかの厳しい要請が課せられること
  になる。
コマース市場に対応する
エンタープライズ・クラウドの課題
 巨大なスケールと厳密なトランザクションが、
  コマース市場をターゲットとしたクラウド・サー
  ビスの新しい課題になる。

 コンシューマ向けのクラウドに厳密なトランザ
  クションを持ち込むか、エンタープライズ・シス
  テムをスケールさせるか?
 おそらく可能な対応は後者である。
コマース市場に対応する
エンタープライズ・クラウドの課題
 基本的には、コマース向けのクラウドへのニー
  ズの高まりは、現在の基幹系システムのクラ
  ウド化・スケールアウト化の一層の推進によっ
  て応えられることになるだろう。
 コマース市場の拡大に伴って、エンタープライ
  ズ・クラウドの本当の姿が明らかになる。
クラウド受容の現段階
 エンタープライズにおけるクラウドの受容は、
  意識的には、Hypeを超え、大きく進んだ。
 客観的には、かつてのRelational DBや
  LinuxやJavaの受容と同様に、それは、エン
  タープライズの周辺部から進行している。
 現時点では、エンタープライズ・システムの中
  核においては、システムやリソースの統合、管
  理コストの削減という観点からのPrivateクラ
  ウドの構築が関心の焦点である。
 次の段階を展望する必要がある。
無数のクラウド技術の並存
 その一例 jcloudが対応するクラウド・サービス
 Amazon Web         Go Grid
  Services           HP Cloud Services
 Elastic Block      IBM Developer
  Store Models        Cloud
 Azure Storage      OpenStack
  Service            Rackspace
 BlueLock vCloud    RimuHosting
 Cloud Sigma        Terremark eCloud
 Eucalyptus         Terremark vCloud
 File System         Express
もっともっと、沢山のクラウド・
ベンダーが存在する
クラウド技術のオープン化・標準化
 クラウド技術が、産業界に広く受け入れられて
  行くうえで、他のIT技術と同じように、オープン
  な業界標準を持つことが必要だという声が、説
  得力を持つ段階に近づいている。
 クラウド上のデータとアプリケーション・システ
  ムの双方が、標準的なPortabilityのインター
  フェースを持つようになるのが望ましい。
 クラウド・プレーヤたちは、Interoperability
  の標準をサポートする必要がある。
企業の生産性向上とクラウド
 企業にとってクラウド利用の主要な目的は、ク
  ラウド上で顧客にサービスを提供すること。
 いかに速く、いかに簡単に、堅牢なエンタープ
  ライズのサービスを開発し、クラウド上に展開
  できるかは、エンタープライズのクラウド利用
  にとって中心的な課題。
 企業の生産性向上の鍵を、開発プラットフォー
  ムのクラウド化が握っている。
  ただし、問題もある。日本のユーザー企業は、自
   社でソフトを開発しているか?
もう一つの別の視点
個人の可能性の拡大とクラウド
 この間のIT技術の変化を大きくドライブしてきた
  のは、クラウド・デバイスの普及でも、SNSの拡大
  でも、IT技術のコンシューマ化の流れである。
 それは、とりもなおさず、無数の個人がIT技術の
  利用者になったということである。
 開発の側でも、開発者個人のPCの所有と自由な
  ネットワーク・アクセスは、客観的には、ソフトウェ
  アの開発環境を大きく変えてきた。オープンソー
  スの広がりは、こうした変化を背景としている。
 少なくとも、個人としての開発者にとって、クラウド
  利用は、さらに大きな変化の突破口になりうる。
一人で、出来ること
一人で、出来ること
これが、僕のクラウドのイメージ
Java EE 7
JavaEEのクラウド化の意味
 JavaEE7は、現在エンタープライズの基幹系
  で広く利用されているJavaEEのPaaSクラウド
  化を目指したもの。
 アプリケーション開発者が、クラウドのインフラ
  をあれこれを意識しなくても、よく知られた
  JavaEE技術で開発したアプリケーションを、
  そのままクラウドにdeployし、すぐにクラウド
  サービスを開始できるという、多くのJava技術
  者にとっては、魅力的な枠組み。
JavaEEのクラウド化の意味
 JavaEEのクラウド化は、エンタープライズ
  Javaの事実上の標準技術が、クラウド化され
  ることを意味する。
 JavaEE7の構想が
  多数のベンダーの
  賛成によって始まっ
  たことは、クラウド
  の標準化にとって
  も、大きな意味を
  持っている。
JavaEE7の今後の展開
 今年の終わりまでには、JavaEE7の仕様が
  固まるだろう。(長期戦である)
 来年には、WebLogic(Oracle),
  WebSphere(IBM),Jboss(Redhat)等のア
  プリケーション・サーバーのJavaEE7対応版
  が、市場に投入されるだろう。
 PaaSエンタープライズ・クラウドの本命の一つ
  と、筆者は考えている。
Play 2.0


  Play 2.0は、ある意味で、かつてのSpringと
  同様に、JavaEEのアンチ・テーゼである。開
  発の容易さにフォーカスしながら、取り入れて
  いる技術は新しく、強力である。
  残念ながら、今回は、Playの中核の一つであ
  るAkkaについては、説明を割愛した。
Devoxx2011でPlay2.0を発表する、SadekとGuillaume

2011/11/16




              Sadek Drobi




                            Guillaume Bort
Play 2.0とTypesafe社
 Playは、仏Zenexity社のGuillaume Bort
  氏を中心に開発された、オープンソースの
  Webアプリケーションフレームワークである。
 2011年11月16日、米Typesafe社は、
  Guillaume Bort氏を顧問に迎え入れ、Play
  をTypesafe stack 2.0と統合することを発
  表。あわせてPlay2.0 betaをリリースした。
 米Typesafe社は、Scalaの創始者Martin
  Oderskyが会長を務め、James Gosling、
  Doug Leaが顧問に名を連ねている。
Play 2.0の特徴
 Java/Scalaベースの、Type Safeな、Web
  アプリ開発の為の軽量フレームワーク。
 アジャイルな開発手法にフォーカス。
 RESTfulアーキテクチャーを志向。
 SQL/NonSQL 多様なDataStoreに対応。
 Multi-Coreに対応した、Actorベースの非同
  期並列プログラミング(Akka)。
 クラウドを意識したプラットホーム。
アジャイルな開発スタイル
 Playでは、compile-package-deployの面
  倒なサイクルを繰り返す必要はなく、ソースを
  修正したら、ブラウザのReloadボタンを押す
  だけでいい。
 Playは、Buildシステムを自前で持ち、Java
  のソースコードを直接コンパイルし、JVMに、
  hot-reloadする。
 コンパイルエラーは、ブラウザーに表示される
RESTful アーキテクチャー
 Webアプリケーションは、HTTPのRequestを
  受けて、Responseを返すものである。
 ServletやStrutsは、HTTPのJavaレベルで
  のある抽象的な見方を与えているのだが、
  Webアプリケーションのフレームワークは、
  HTTPとそのコンセプトへの、完全でより直接
  のアクセスを可能にすべきである。
 Template Engineを使えば、Servletは、必
  要ではない。
“Share-Nothing”
Stateless アーキテクチャー
 JavaのWebフレームワークの一部は、状態を
  持っている。
 こうしたアプローチは、ページの状態を自動的
  に記憶するには役に立つ。同時に、「バックボ
  タン」の処理等で面倒な問題も抱え込む。
 Playは、PHP,Ruby on Railsと同様に、状態
  を持たない“Share-Nothing”アーキテクチャ
  ーを採用する。
HTTP Routing
 conf/routes

conf/routesファイルは、HTTP RequestのMethod、
URIに、それによって引き起こされるActionを対応させる。
Actionは、HTTP Responseを返す。

HTTP Method
   # Home page
   GET         /        controllers.Application.index
   # Hello action
   GET         /hello   controllers.Application.sayHell

             URI                Action
Controller              Actionの記述
app/controllers/Application.java

 app/controllers/以下のJava/Scalaファイ
  ルは、routesファイルで、HTTP Requestに
  対応づけられたActionを定義する。
 package controllers;

 import play.*;
 import play.mvc.*;
 import views.html.*;

 public class Application extends Controller {
  public static Result index() {
    return ok(index.render("Hello World!"));
  }

 }
Template HTTP Responseの雛形
  app/views/index.scala.html
   app/views/ 以下のscala.htmlファイルは、
    Scala functionにコンパイルされ、Action記
    述から呼び出される。
@(name: String, repeat: Int, color: String)
@main("Here is the result:") {
  <ul style="color: @if(color != null) { @color } else { "inherited" }">
    @for(i <- 1 to repeat) {
        <li>Hello @name!</li>
    }
  </ul>
  <p class="buttons">
    <a href="@routes.Application.index">Back to the form</a>
  </p>
}
conf/routes ファイル
GET    /              controllers.Application.index


app/controllers/Application.java ファイル
public static Result index() {
    return ok(
       index.render(“Hello World!”)
    );
  }                                        Controller


app/views/index.scala.html ファイル
@(message: String)
 <h1>@message</h1>
                                            Template
JPAのサポートとMVC
 Playは、ORMとして、Java標準のJPAをサポー
  トしている。
 Play2.0では、Stateless JPAと呼ばれる、新し
  い実装である、Ebeanが提供されている。
 これらの定義ファイルは、app/models ディレ
  クトリーに置かれている。
 こうして、appディレクトリー下には、
  app/models, app/views, app/controllers
  の3つのディレクトリーが置かれることになる。
Modelの定義
 app/models/Computer.java

@Entity
public class Computer extends Model {

  @Id
  public Long id;
  @Constraints.Required
  public String name;
  @Formats.DateTime(pattern="yyyy-MM-dd")
  public Date introduced;
  @Formats.DateTime(pattern="yyyy-MM-dd")
  public Date discontinued;

  @ManyToOne
  public Company company;
# Home page
                                  GET / controllers.Application.index
                                  # Hello action
                                  GET /hello controllers.Application.
                                                           sayHello

                                                     public class
                                          Router      Application
                                                          extends
                                                            Controller {
@(message: String)   Controller                       public static
<h1>@message</h1>                                     Result index() {
                                                        ……


                                                    @Entity
            Views                         Model     public class Company
                                                      extends Model {
                                                      @Id
                                                      public Long id;
    Play 2.0のMVC                                      @Constraints.
                                                         Required
                                                      public String name;
public static Result sayHello() {
      Form<Hello> form = form(Hello.class).bindFromRequest();
      if(form.hasErrors()) {
          return badRequest(index.render(form));
      } else {
          Hello data = form.get();
          return ok(
             hello.render(data.name, data.repeat, data.color)
          );
      }
  }                   app/controllers/Application.java


                              JavaとScala
def sayHello = Action { implicit request =>
   helloForm.bindFromRequest.fold(
     formWithErrors => BadRequest(html.index(formWithErrors)),
     {case (name, repeat, color) =>
                Ok(html.hello(name, repeat.toInt, color))}
   )
 }                 app/controllers/Application.scala
「エンタープライズ・クラウドの現在」

               資料
 A)   GlassfishのService Deploy
 B)   GlassfishのAmazon EC2へのdeploy
 C)   Play 2.0 Template Overview
 D)   Play 2.0 routesファイル サンプル
GlassfishのService Deploy


  Devoxx 2011での、JavaEE7のアーキテク
  トJerome Dochezのスライドから。
1.Application Introspection
 Application    Virtual Cluster
Introspection   Creation




   まず、アプリケーションの提供する
   サービスを分析します。
   次に、その分析結果に基づいて、
   Virtual Clusterの生成に取り掛かり
   ます。




            サービスのdeployまでの流れ
2. Virtual Cluster Creation
 Application    Virtual Cluster
Introspection   Creation



                                  Virtual Nodeを作成し、
                                  すべてのノード上に、
                                  JavaEE7をインストール
                                  します。


                      Virtual
                     Machines
                       With
                      JavaEE


            サービスのdeployまでの流れ
2. Virtual Cluster Creation
 Application       Virtual Cluster   Association
Introspection      Creation


                                                   Virtual Nodeを作成し、
                                                   Load Balancerを置き
        Virtual                       Virtual      ます。
       Machines                      Machines      必要に応じてDatabase
       with Load                       with        やMQ等の外部リソー
       Balancer                      Database      スを置きます。
                                      Service
                                                   これで、次の段階の
                         Virtual
                        Machines                   Associationの準備が
                          With                     出来ました。
                         JavaEE


            サービスのdeployまでの流れ
3. Association
 Application       Virtual Cluster   Association   Deployment
Introspection      Creation



                                                   Load Balancer,
                                                   JavaEEサーバー
        Virtual                       Virtual
                                                   Databaseを関連
       Machines                      Machines
                                       with        付けます。
       with Load
       Balancer                      Database      これで、アプリケ
                                      Service      ーションのdeploy
                         Virtual                   の準備が出来ま
                        Machines                   した。
                          With
                         JavaEE


            サービスのdeployまでの流れ
4. Deployment
 Application       Virtual Cluster   Association   Deployment
Introspection      Creation



                                                   JavaEEサーバー
                                                   に、アプリケーシ
                                      Virtual
        Virtual                                    ョンをdeployします。
       Machines                      Machines
       with Load                       with
       Balancer                      Database
                                      Service
                         Virtual
                        Machines
                          With
                         JavaEE


            サービスのdeployまでの流れ
クラウド・サービス開始
 Application       Virtual Cluster   Association   Deployment
Introspection      Creation




        Virtual                       Virtual
       Machines                      Machines
       with Load                       with
       Balancer                      Database
                                      Service
                         Virtual
                        Machines
                          With
                         JavaEE
Glassfishの
Amazon EC2へのdeploy


  https://wikis.oracle.com/download/at
  tachments/20876159/GlassFish+Paa
  S+Overview.odp?version=7&modifica
  tionDate=1301350954000
  の中の一枚のスライドから
Create Domain/Deploy

                        Domain Manager

                                          1. DAS Creation
     3. Deployment
                                  IaaS Management Service
                            4. VM Creation AWS Plugin
                DAS
                                  2. DAS Creation
                      Elasiticity
Orchestrator                              Amazon Web Services
                      Manager
                                                     5. VM Creation



                                    GF Instance       GF Instance
               6. Add Node
               7. Deployment
Create Domain/Deploy

                 Domain Manager



PaaSの管理者は、まず、Domainをdeployします。
具体的には、Domain Managerを立ち上げます。
Create Domain/Deploy

                          Domain Manager

                                            1. DAS Creation
Domain Managerの最初の仕事は、
DAS(Domain Administration Service)   IaaS Management Service
を立ち上げることです。
                                              AWS Plugin
Domain Managerは、IaaS
Management Service(IMS)を立ち上
げて、IMSはAWS Plug-inを通じて、
Amazon Web Serviceに働き掛け、                   Amazon Web Services
DASのインスタンスを生成しようとし
ます。
Create Domain/Deploy

                Domain Manager

                                 1. DAS Creation

                         IaaS Management Service
                                   AWS Plugin

                        2. DAS Creation
         DAS                    Amazon Web Services


DASが出来ました。Domain Managerの次の仕事は、
生成されたDASのインスタンス上に、Orchestratorと
Elasicity Managerという二つのサービスをdeployし、
それらを走らせることです。
Create Domain/Deploy

                        Domain Manager


     3. Deployment
                                   IaaS Management Service
                                            AWS Plugin

               DAS
                     Elasiticity
Orchestrator                             Amazon Web Services
                     Manager


   OrchestrtorとElasiticity Managerがdeployされました。
   こうして動き始めたDAS(Domain Administration Service)の次の仕事は、
   Glassfishが走るインスタンスを生成することです。
Domain Manager



                                   IaaS Management Service
                           4. VM Creation   AWS Plugin

               DAS
                     Elasiticity
Orchestrator                             Amazon Web Services
                     Manager


DASは、IMS(IaaS Management Service)に、Virtual Machineの生成を命じます。
Domain Manager



                                   IaaS Management Service
                           4. VM Creation   AWS Plugin

               DAS
                     Elasiticity
Orchestrator                             Amazon Web Services
                     Manager
                                                     5. VM Creation
IMSは、先ほどと同じく、AWS Plug-inを通じて、
Amazon Web Serviceに働き掛け、クラウド上に
ノードを割り当て、それぞれのノードに
Virtual Machineを生成します。        GF Instance                GF Instance
Domain Manager



                                    IaaS Management Service
                                             AWS Plugin

                DAS
                      Elasiticity
Orchestrator                              Amazon Web Services
                      Manager

      各ノードは、ノードが割り当てられると
      OrchestratorにAdd Nodeの報告をします・


                                     GF Instance          GF Instance
               6. Add Node
Domain Manager



                                    IaaS Management Service
                                             AWS Plugin

                DAS
                      Elasiticity
Orchestrator                              Amazon Web Services
                      Manager


     Orchestratorは、それを受けると、
     各ノード上のVMに、GlassFishの
     インスタンスをdeployします。
                                     GF Instance          GF Instance

               7. Deployment
Domain Manager



                                   IaaS Management Service
                                            AWS Plugin

               DAS
                     Elasiticity
Orchestrator                             Amazon Web Services
                     Manager




                                    GF Instance          GF Instance
Create Domain/Deploy

                        Domain Manager

                                          1. DAS Creation
     3. Deployment
                                  IaaS Management Service
                            4. VM Creation AWS Plugin
                DAS
                                  2. DAS Creation
                      Elasiticity
Orchestrator                              Amazon Web Services
                      Manager
                                                     5. VM Creation



                                    GF Instance       GF Instance
               6. Add Node
               7. Deployment
Play 2.0
Template Overview


  https://github.com/playframework/Pl
  ay20/wiki/JavaTemplates
  Play 1.xでは、Templateの記述にGroovy
  が用いられていたが、Play 2.0からは、
  Scalaに変わった。
TemplateファイルとScala function
 Templateファイルは、次のような命名規則で
  Scala functionにコンパイルされる。

 views/Application/index.scala.html
                 generates

 views.html.Application.index
Templateファイルから生成された
    ScalaコードのJavaからの呼び出し
     次のTemplateファイルindex.scala.html
      から生成されたScala function indexを
          @(customer: Customer, orders: Seq[Order])

          <h1>Welcome @customer.name!</h1>

          <ul>
          @for(order <- orders) {
            <li>@order.title</li>
          }
          </ul>

     次のように、Javaから呼び出すことが出来る。
Html html = views.html.Application.index.render(customer, orders);
Template Syntax
Special character ‘@’
 ‘@’は、Scala文の始まりを示す。文の終わり
  は指定する必要はなく、コードからPlayが、自
  動的に推測する。青字部分が、Scalaコードと
  して解釈される。
Hello @customer.name!
Hello @(customer.firstName + customer.lastName)!
Hello @{val name = customer.firstName + customer.lastName; name}!

 ‘@’のエスケープには、’@@’を使う。
My email is bob@@example.com
Template Parameters
   Templateは、結局は、Scalaのfunctionな
    ので、引数が必要である。
   Templateの引数は、必ず、ファイルの第一
    行で宣言されねばならない。

@(customer: models.Customer, orders: Seq[models.Order])
@(title: String = "Home")
@(title:String)(body: => Html)
@(title: String)(body: => Html)(implicit request: play.api.mvc.Request)
Looping / If-Blocks
 Templateの中で、for-comprehensionを
  利用できる。この時、コンパイラーは、ブロック
  の前にyieldキーワードを挿入することに注意
      <ul>
      @for(p <- products) {
         <li>@p.name ($@p.price)</li>
      }
      </ul>

      @if(items.isEmpty) {
         <h1>Nothing to display</h1>
      } else {
         <h1>@items.size items!</h1>
      }
Declaring reusable blocks
 Template中に、再利用可能なTemplateブ
  ロックを定義できる。
    @display(product: models.Product) = {
      @product.name ($@product.price)
    }
    <ul>
    @products.map { p =>
      @display(product = p)
    }
    </ul>

 @title(text: String) = @{
   text.split(' ').map(_.capitalize).mkString(" ")
 }
 <h1>@title("hello world")</h1>
Misc.
  Declaring reusable values
@defining(user.firstName + " " + user.lastName) { fullName =>
 <div>Hello @fullName</div>}

  Import statements
@(customer: models.Customer, orders: Seq[models.Order])
@import utils.

  Comments
@*********************
* This is a comment *
*********************@
Layout
 views/main.scala.htmlがあれば、それが
  メインのレイアウト・ファイルになる。
  @(title: String)(content: Html)
  <!DOCTYPE html>
  <html>
   <head>
    <title>@title</title>
   </head>
   <body>
    <section class="content">@content</section>
   </body>
  </html>

  @main(title = "Home") {
    <h1>Home page</h1>      views/Application/index.scala.html
  }
@(title: String)(sidebar: Html)(content: Html)
     <!DOCTYPE html>
     <html>
      <head>
       <title>@title</title>
      </head>
      <body>
       <section class="sidebar">@sidebar</section>
       <section class="content">@content</section>
      </body>
     </html>



@main("Home") {                 @sidebar = {
  <h1>Sidebar</h1>                <h1>Sidebar</h1>
}{                              }
  <h1>Home page</h1>            @main("Home")(sidebar) {
}                                 <h1>Home page</h1>
                                }
Tags
  views/tags/notice.scala.html
@(level: String = "error")(body: (String) => Html)
@if(level == "success") {
  <p class="success">
   @body("green")
  </p>
}
@if(level == "warning") {
  <p class="warning">
   @body("orange")
  </p>
}
@if(level == "error") {
                            @import tags._
  <p class="error">
   @body("red")
                            @notice("error") { color =>
  </p>
                              Oops, something is
}
                            <span style="color:@color">wrong</span>
                            }
Play 2.0
routesファイル サンプル


  Playのrouteファイルは、Playのコンセプトを
  よく表している。
  Play 2.0と一緒に配布されている、プログラ
  ム・サンプルから、routesファイルを抜き出し
  てみた。参考までサンプルの実行のスクリー
  ン・ショットを添付した。
conf/routes
# Routes
# This file defines all application routes (Higher priority routes
first)
# ~~~~

# Home page
GET  /                  controllers.Application.index

# Hello action
GET    /hello           controllers.Application.sayHello

# Map static resources from the /public folder to the /assets URL
path
GET   /assets/*file     controllers.Assets.at(path="/public", file)
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Default path will just redirect to the computer list
GET   /                          controllers.Application.index

# Computers list (look at the default values for pagination parameters)
GET     /computers             controllers.Application.list(p:Int ?= 0, s:Int ?= 2,
f ?= "")

# Add computer
GET    /computers/new            controllers.Application.create
POST /computers                   controllers.Application.save

# Edit existing computer
GET     /computers/:id            controllers.Application.edit(id:Long)
POST /computers/:id               controllers.Application.update(id:Long)

# Delete a computer
POST /computers/:id/delete         controllers.Application.delete(id:Long)

# Map static resources from the /public folder to the /assets URL path
GET   /assets/*file             controllers.Assets.at(path="/public", file)
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# The home page
GET    /                             controllers.Projects.index

# Authentication
GET   /login                         controllers.Application.login
POST /login                          controllers.Application.authenticate
GET   /logout                        controllers.Application.logout

# Projects
POST /projects                       controllers.Projects.add

POST /projects/groups controllers.Projects.addGroup()
DELETE /projects/groups controllers.Projects.deleteGroup(group: String)
PUT   /projects/groups  controllers.Projects.renameGroup(group: String)

DELETE /projects/:project          controllers.Projects.delete(project: Long)
PUT   /projects/:project           controllers.Projects.rename(project: Long)
POST /projects/:project/team             controllers.Projects.addUser(project: Long)
DELETE /projects/:project/team           controllers.Projects.removeUser(project: Long)

# Tasks
GET    /projects/:project/tasks     controllers.Tasks.index(project: Long)
POST /projects/:project/tasks       controllers.Tasks.add(project: Long, folder: String)
PUT    /tasks/:task                 controllers.Tasks.update(task: Long)
DELETE /tasks/:task                 controllers.Tasks.delete(task: Long)

POST /tasks/folder                 controllers.Tasks.addFolder
DELETE /projects/:project/tasks/folder
                                    controllers.Tasks.deleteFolder(project: Long, folder: String)
PUT   /project/:project/tasks/folder
                                    controllers.Tasks.renameFolder(project: Long, folder: String)

# Javascript routing
GET    /assets/javascripts/routes   controllers.Application.javascriptRoutes

# Map static resources from the /public folder to the /public path
GET   /assets/*file                controllers.Assets.at(path="/public", file)

Contenu connexe

Similaire à クラウド上のサービス開発の新しい動向 --- JavaEE7とPlay2.0 ---

第6回八子クラウド座談会資料 20111211
第6回八子クラウド座談会資料 20111211第6回八子クラウド座談会資料 20111211
第6回八子クラウド座談会資料 20111211知礼 八子
 
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料松崎 和弘
 
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」maruyama097
 
mixiスマートフォン戦略
mixiスマートフォン戦略mixiスマートフォン戦略
mixiスマートフォン戦略mixiPR
 
第27回WebSig会議(大崎さんスライド)
第27回WebSig会議(大崎さんスライド)第27回WebSig会議(大崎さんスライド)
第27回WebSig会議(大崎さんスライド)WebSig24/7
 
20120711タイのネットビジネス環境
20120711タイのネットビジネス環境20120711タイのネットビジネス環境
20120711タイのネットビジネス環境01Booster
 
タイのインターネットビジネス環境 各種市場規模や普及率など
タイのインターネットビジネス環境 各種市場規模や普及率などタイのインターネットビジネス環境 各種市場規模や普及率など
タイのインターネットビジネス環境 各種市場規模や普及率などユニモン株式会社
 
この20年に見るシステム工学とインターネットテクノロジー
この20年に見るシステム工学とインターネットテクノロジーこの20年に見るシステム工学とインターネットテクノロジー
この20年に見るシステム工学とインターネットテクノロジー馮 富久
 
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI WebRTCにより可視化されるリアルタイムクラウド。求められるAPI
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI Kensaku Komatsu
 
「トリセツ」の枠を超えはじめたTCの進化
「トリセツ」の枠を超えはじめたTCの進化「トリセツ」の枠を超えはじめたTCの進化
「トリセツ」の枠を超えはじめたTCの進化Teiichi Ota
 
クラウドEXPO 2011春資料 20110418
クラウドEXPO 2011春資料 20110418クラウドEXPO 2011春資料 20110418
クラウドEXPO 2011春資料 20110418知礼 八子
 
ウフルソーシャルエンタープライズ
ウフルソーシャルエンタープライズウフルソーシャルエンタープライズ
ウフルソーシャルエンタープライズuhuru_jp
 
社会構造を変える Io Tサービス ~イノベーションにチャレンジせよ~
社会構造を変える Io Tサービス  ~イノベーションにチャレンジせよ~社会構造を変える Io Tサービス  ~イノベーションにチャレンジせよ~
社会構造を変える Io Tサービス ~イノベーションにチャレンジせよ~Nitta Tetsuya
 
InternetBusiness in 2020 ( Japanese Edition )
InternetBusiness in 2020 ( Japanese Edition ) InternetBusiness in 2020 ( Japanese Edition )
InternetBusiness in 2020 ( Japanese Edition ) 拓弥 宮田
 
IoTプラットフォーム動向について2017June
IoTプラットフォーム動向について2017JuneIoTプラットフォーム動向について2017June
IoTプラットフォーム動向について2017JuneKeiichiro Nabeno
 
座談会資料(趣旨説明資料) 20161022
座談会資料(趣旨説明資料) 20161022座談会資料(趣旨説明資料) 20161022
座談会資料(趣旨説明資料) 20161022知礼 八子
 

Similaire à クラウド上のサービス開発の新しい動向 --- JavaEE7とPlay2.0 --- (20)

第6回八子クラウド座談会資料 20111211
第6回八子クラウド座談会資料 20111211第6回八子クラウド座談会資料 20111211
第6回八子クラウド座談会資料 20111211
 
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料
20111022 「ソーシャルメディア時代のコミュニケーション」彦根市倫理法人会MS資料
 
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」
「変貌するWebの世界 -- クラウドとクラウド・デバイスのインパクト」
 
mixiスマートフォン戦略
mixiスマートフォン戦略mixiスマートフォン戦略
mixiスマートフォン戦略
 
第27回WebSig会議(大崎さんスライド)
第27回WebSig会議(大崎さんスライド)第27回WebSig会議(大崎さんスライド)
第27回WebSig会議(大崎さんスライド)
 
6 22 pc
6 22 pc6 22 pc
6 22 pc
 
20120711タイのネットビジネス環境
20120711タイのネットビジネス環境20120711タイのネットビジネス環境
20120711タイのネットビジネス環境
 
タイのインターネットビジネス環境 各種市場規模や普及率など
タイのインターネットビジネス環境 各種市場規模や普及率などタイのインターネットビジネス環境 各種市場規模や普及率など
タイのインターネットビジネス環境 各種市場規模や普及率など
 
この20年に見るシステム工学とインターネットテクノロジー
この20年に見るシステム工学とインターネットテクノロジーこの20年に見るシステム工学とインターネットテクノロジー
この20年に見るシステム工学とインターネットテクノロジー
 
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI WebRTCにより可視化されるリアルタイムクラウド。求められるAPI
WebRTCにより可視化されるリアルタイムクラウド。求められるAPI
 
00.pdf
00.pdf00.pdf
00.pdf
 
20110414_sem_endo
20110414_sem_endo20110414_sem_endo
20110414_sem_endo
 
「トリセツ」の枠を超えはじめたTCの進化
「トリセツ」の枠を超えはじめたTCの進化「トリセツ」の枠を超えはじめたTCの進化
「トリセツ」の枠を超えはじめたTCの進化
 
クラウドEXPO 2011春資料 20110418
クラウドEXPO 2011春資料 20110418クラウドEXPO 2011春資料 20110418
クラウドEXPO 2011春資料 20110418
 
ウフルソーシャルエンタープライズ
ウフルソーシャルエンタープライズウフルソーシャルエンタープライズ
ウフルソーシャルエンタープライズ
 
Mobilefist seminar
Mobilefist seminarMobilefist seminar
Mobilefist seminar
 
社会構造を変える Io Tサービス ~イノベーションにチャレンジせよ~
社会構造を変える Io Tサービス  ~イノベーションにチャレンジせよ~社会構造を変える Io Tサービス  ~イノベーションにチャレンジせよ~
社会構造を変える Io Tサービス ~イノベーションにチャレンジせよ~
 
InternetBusiness in 2020 ( Japanese Edition )
InternetBusiness in 2020 ( Japanese Edition ) InternetBusiness in 2020 ( Japanese Edition )
InternetBusiness in 2020 ( Japanese Edition )
 
IoTプラットフォーム動向について2017June
IoTプラットフォーム動向について2017JuneIoTプラットフォーム動向について2017June
IoTプラットフォーム動向について2017June
 
座談会資料(趣旨説明資料) 20161022
座談会資料(趣旨説明資料) 20161022座談会資料(趣旨説明資料) 20161022
座談会資料(趣旨説明資料) 20161022
 

Plus de maruyama097

Convolutionl Neural Network 入門
Convolutionl Neural Network 入門Convolutionl Neural Network 入門
Convolutionl Neural Network 入門maruyama097
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolationmaruyama097
 
TensorFlowとCNTK
TensorFlowとCNTKTensorFlowとCNTK
TensorFlowとCNTKmaruyama097
 
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座maruyama097
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Papermaruyama097
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考えるmaruyama097
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在maruyama097
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twittermaruyama097
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界maruyama097
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来maruyama097
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02maruyama097
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術maruyama097
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識maruyama097
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?maruyama097
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考maruyama097
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットmaruyama097
 

Plus de maruyama097 (20)

Convolutionl Neural Network 入門
Convolutionl Neural Network 入門Convolutionl Neural Network 入門
Convolutionl Neural Network 入門
 
ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolation
 
TensorFlowとCNTK
TensorFlowとCNTKTensorFlowとCNTK
TensorFlowとCNTK
 
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考える
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界
 
Aurora
AuroraAurora
Aurora
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケット
 
Google Dremel
Google DremelGoogle Dremel
Google Dremel
 

クラウド上のサービス開発の新しい動向 --- JavaEE7とPlay2.0 ---

  • 2. Agenda  21世紀の最初の10年に起きたこと  今後の展望とエンタープライズ・クラウドの課題  JavaEE 7  Play 2.0 資料 A) GlassfishのService Deploy B) GlassfishのAmazon EC2へのdeploy C) Play 2.0 Template Overview D) Play 2.0 routesファイル サンプル
  • 6. 21世紀、最初の10年 携帯電話の爆発的普及 90 21世紀の最初の10年で、 世界人口の80%が携帯 78.59 80 電話を持ち、30%がイン 68.77 70 60.36 60 ターネットを利用するよう 50.99 携帯電話 50 になった。 42.15 40 34.21 30.48 27.63 26.81 30 22.47 23.55 20.79 18.60 17.67 20 15.87 15.00 8 10.62 12.32 14.15 インターネット 10 0 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
  • 7. 21世紀、最初の10年 インターネットの発展とクラウドの登場 90 21世紀初頭、Googleの登場を画期に、 80 コンシューマ向けのインターネット・ 78.59 70 クラウドが成立し、その技術は、 68.77 Amazon,MSにより、エンター 携帯電話 60.36 60 50.99 50 プライズ向けのクラウド 42.15 40 として発展した。 34.21 30.48 27.63 26.81 30 22.47 23.55 20.79 18.60 インターネット 17.67 20 15.00 15.87 14.15 12.32 10.62 10 8 2006年 Amazon EC2/S3 0 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2004年 Google上場 2008年 Microsoft Azure
  • 9. 2007年-2011年 クラウド・デバイスの登場 90 21世紀の最初の10年の 後半で、スマートフォンが 78.59 80 登場し、アメリカでは携帯 68.77 70 60.36 60 電話全体の30%を占める 携帯電話 50.99 50 ようになった。 42.15 40 34.21 27.63 30 22.47 20 15.00 18.60 スマートフォン 10 0 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2007年 iPhone, 2008年 Android
  • 10. 2007年-2011年 クラウド・デバイスの躍進 21世紀の最初の10年の 後半で、Android、iPhone iPad等のクラウド・デバイス の拡大は急速で、PCを上回 る勢いである。
  • 12. 新しいネットワーク・メディアのインパクト  2011年1月 チュニジア 中近東・北アフリカでの一連の  2011年2月 エジプト 変化でも、新しいネットワーク・  2011年3月 リビア メディアは、大きな役割を果た したと言われている。  2011年4月 シリア 2010/02/10 エジプト 2010/04/22 シリア
  • 14. Facebookユーザー8億人を突破 2011年9月22日 f8 1日当たりの利用者数、5億人に達する
  • 16. Google Checkoutの Googleウォレットへの統合 11月18日  Google ウォレットは、客の支払い情報を安全に 保存する仮想の財布(ウォレット)で、実店舗でも オンラインでも、すばやく支払いを行うことができ る。従来のGoogle Checkout は Google ウォ レットに統合された。  2014年までに50% のスマートフォンが NFCを内蔵するよう になるだろう。 コマース担当副社長 Stephanie Tilenius
  • 17. クラウドとクラウド・デバイス 一年前(2010年)の状況 クラウド・ クラウド マーケット デバイス iTune/ Apple × ○ AppStore Google ○ ○ Android Market Microsoft ○ × Amazon ○ × Facebook × ×
  • 18. クラウド+クラウド・デバイスの 新しいプレーヤの形成 2011年 クラウド・ クラウド マーケット デバイス iTune/ Apple ○ ○ AppStore Google ○ ○ Android Market Microsoft ○ ○ Marketplace Amazon ○ ○ Amazon Facebook △ △ ?
  • 22. 今後の展望と エンタープライズ・クラウドの課題 これから起きるだろうことを考える。 新しいネットワーク・メディアの躍進と新しいネ ットワーク・マーケットの台頭の二つを軸に変 化は進んでゆくだろう。こうした視点から、エン タープライズ・クラウドの課題を考える。
  • 25. 新しいネットワーク・メディアと 新しいネットワーク・マーケット  巨大なクラウドと膨大な数のクラウド・デバイ スによって、新しいスタイルのコミュニケーショ ンと情報の共有、自由時間の享受を可能とす るネットワーク・メディアが成立しつつある。こう して、旧メディアの没落が始まる。  いままた、無数の個人のネットワーク利用を背 景として、クラウドとクラウド・デバイスの連携 の拡大は、新しいネットワーク上のマーケット、 新しい経済システムを準備しつつある。
  • 27. コマース市場の拡大 新しいネットワーク・マーケットの成立  日常の消費行動を含め、全ての経済行動が、 ネットワーク上で行われるようになる。  これを担うシステムは、これまでのエンタープ ライズ・システムの規模を大きく超えるものに なる。システムの規模拡大は必須である。  全ての処理がリアルタイムで行われる必要は ないのだが、コンシューマ向けのクラウド・サ ービスとは異なって、そのトランザクション処理 には、いくつかの厳しい要請が課せられること になる。
  • 28. コマース市場に対応する エンタープライズ・クラウドの課題  巨大なスケールと厳密なトランザクションが、 コマース市場をターゲットとしたクラウド・サー ビスの新しい課題になる。  コンシューマ向けのクラウドに厳密なトランザ クションを持ち込むか、エンタープライズ・シス テムをスケールさせるか?  おそらく可能な対応は後者である。
  • 29. コマース市場に対応する エンタープライズ・クラウドの課題  基本的には、コマース向けのクラウドへのニー ズの高まりは、現在の基幹系システムのクラ ウド化・スケールアウト化の一層の推進によっ て応えられることになるだろう。  コマース市場の拡大に伴って、エンタープライ ズ・クラウドの本当の姿が明らかになる。
  • 30. クラウド受容の現段階  エンタープライズにおけるクラウドの受容は、 意識的には、Hypeを超え、大きく進んだ。  客観的には、かつてのRelational DBや LinuxやJavaの受容と同様に、それは、エン タープライズの周辺部から進行している。  現時点では、エンタープライズ・システムの中 核においては、システムやリソースの統合、管 理コストの削減という観点からのPrivateクラ ウドの構築が関心の焦点である。  次の段階を展望する必要がある。
  • 31. 無数のクラウド技術の並存 その一例 jcloudが対応するクラウド・サービス  Amazon Web  Go Grid Services  HP Cloud Services  Elastic Block  IBM Developer Store Models Cloud  Azure Storage  OpenStack Service  Rackspace  BlueLock vCloud  RimuHosting  Cloud Sigma  Terremark eCloud  Eucalyptus  Terremark vCloud  File System Express
  • 33. クラウド技術のオープン化・標準化  クラウド技術が、産業界に広く受け入れられて 行くうえで、他のIT技術と同じように、オープン な業界標準を持つことが必要だという声が、説 得力を持つ段階に近づいている。  クラウド上のデータとアプリケーション・システ ムの双方が、標準的なPortabilityのインター フェースを持つようになるのが望ましい。  クラウド・プレーヤたちは、Interoperability の標準をサポートする必要がある。
  • 34. 企業の生産性向上とクラウド  企業にとってクラウド利用の主要な目的は、ク ラウド上で顧客にサービスを提供すること。  いかに速く、いかに簡単に、堅牢なエンタープ ライズのサービスを開発し、クラウド上に展開 できるかは、エンタープライズのクラウド利用 にとって中心的な課題。  企業の生産性向上の鍵を、開発プラットフォー ムのクラウド化が握っている。  ただし、問題もある。日本のユーザー企業は、自 社でソフトを開発しているか?
  • 35. もう一つの別の視点 個人の可能性の拡大とクラウド  この間のIT技術の変化を大きくドライブしてきた のは、クラウド・デバイスの普及でも、SNSの拡大 でも、IT技術のコンシューマ化の流れである。  それは、とりもなおさず、無数の個人がIT技術の 利用者になったということである。  開発の側でも、開発者個人のPCの所有と自由な ネットワーク・アクセスは、客観的には、ソフトウェ アの開発環境を大きく変えてきた。オープンソー スの広がりは、こうした変化を背景としている。  少なくとも、個人としての開発者にとって、クラウド 利用は、さらに大きな変化の突破口になりうる。
  • 40. JavaEEのクラウド化の意味  JavaEE7は、現在エンタープライズの基幹系 で広く利用されているJavaEEのPaaSクラウド 化を目指したもの。  アプリケーション開発者が、クラウドのインフラ をあれこれを意識しなくても、よく知られた JavaEE技術で開発したアプリケーションを、 そのままクラウドにdeployし、すぐにクラウド サービスを開始できるという、多くのJava技術 者にとっては、魅力的な枠組み。
  • 41. JavaEEのクラウド化の意味  JavaEEのクラウド化は、エンタープライズ Javaの事実上の標準技術が、クラウド化され ることを意味する。  JavaEE7の構想が 多数のベンダーの 賛成によって始まっ たことは、クラウド の標準化にとって も、大きな意味を 持っている。
  • 42. JavaEE7の今後の展開  今年の終わりまでには、JavaEE7の仕様が 固まるだろう。(長期戦である)  来年には、WebLogic(Oracle), WebSphere(IBM),Jboss(Redhat)等のア プリケーション・サーバーのJavaEE7対応版 が、市場に投入されるだろう。  PaaSエンタープライズ・クラウドの本命の一つ と、筆者は考えている。
  • 43. Play 2.0 Play 2.0は、ある意味で、かつてのSpringと 同様に、JavaEEのアンチ・テーゼである。開 発の容易さにフォーカスしながら、取り入れて いる技術は新しく、強力である。 残念ながら、今回は、Playの中核の一つであ るAkkaについては、説明を割愛した。
  • 45. Play 2.0とTypesafe社  Playは、仏Zenexity社のGuillaume Bort 氏を中心に開発された、オープンソースの Webアプリケーションフレームワークである。  2011年11月16日、米Typesafe社は、 Guillaume Bort氏を顧問に迎え入れ、Play をTypesafe stack 2.0と統合することを発 表。あわせてPlay2.0 betaをリリースした。  米Typesafe社は、Scalaの創始者Martin Oderskyが会長を務め、James Gosling、 Doug Leaが顧問に名を連ねている。
  • 46. Play 2.0の特徴  Java/Scalaベースの、Type Safeな、Web アプリ開発の為の軽量フレームワーク。  アジャイルな開発手法にフォーカス。  RESTfulアーキテクチャーを志向。  SQL/NonSQL 多様なDataStoreに対応。  Multi-Coreに対応した、Actorベースの非同 期並列プログラミング(Akka)。  クラウドを意識したプラットホーム。
  • 47. アジャイルな開発スタイル  Playでは、compile-package-deployの面 倒なサイクルを繰り返す必要はなく、ソースを 修正したら、ブラウザのReloadボタンを押す だけでいい。  Playは、Buildシステムを自前で持ち、Java のソースコードを直接コンパイルし、JVMに、 hot-reloadする。  コンパイルエラーは、ブラウザーに表示される
  • 48.
  • 49.
  • 50. RESTful アーキテクチャー  Webアプリケーションは、HTTPのRequestを 受けて、Responseを返すものである。  ServletやStrutsは、HTTPのJavaレベルで のある抽象的な見方を与えているのだが、 Webアプリケーションのフレームワークは、 HTTPとそのコンセプトへの、完全でより直接 のアクセスを可能にすべきである。  Template Engineを使えば、Servletは、必 要ではない。
  • 51. “Share-Nothing” Stateless アーキテクチャー  JavaのWebフレームワークの一部は、状態を 持っている。  こうしたアプローチは、ページの状態を自動的 に記憶するには役に立つ。同時に、「バックボ タン」の処理等で面倒な問題も抱え込む。  Playは、PHP,Ruby on Railsと同様に、状態 を持たない“Share-Nothing”アーキテクチャ ーを採用する。
  • 52. HTTP Routing conf/routes conf/routesファイルは、HTTP RequestのMethod、 URIに、それによって引き起こされるActionを対応させる。 Actionは、HTTP Responseを返す。 HTTP Method # Home page GET / controllers.Application.index # Hello action GET /hello controllers.Application.sayHell URI Action
  • 53. Controller Actionの記述 app/controllers/Application.java  app/controllers/以下のJava/Scalaファイ ルは、routesファイルで、HTTP Requestに 対応づけられたActionを定義する。 package controllers; import play.*; import play.mvc.*; import views.html.*; public class Application extends Controller { public static Result index() { return ok(index.render("Hello World!")); } }
  • 54. Template HTTP Responseの雛形 app/views/index.scala.html  app/views/ 以下のscala.htmlファイルは、 Scala functionにコンパイルされ、Action記 述から呼び出される。 @(name: String, repeat: Int, color: String) @main("Here is the result:") { <ul style="color: @if(color != null) { @color } else { "inherited" }"> @for(i <- 1 to repeat) { <li>Hello @name!</li> } </ul> <p class="buttons"> <a href="@routes.Application.index">Back to the form</a> </p> }
  • 55. conf/routes ファイル GET / controllers.Application.index app/controllers/Application.java ファイル public static Result index() { return ok( index.render(“Hello World!”) ); } Controller app/views/index.scala.html ファイル @(message: String) <h1>@message</h1> Template
  • 56. JPAのサポートとMVC  Playは、ORMとして、Java標準のJPAをサポー トしている。  Play2.0では、Stateless JPAと呼ばれる、新し い実装である、Ebeanが提供されている。  これらの定義ファイルは、app/models ディレ クトリーに置かれている。  こうして、appディレクトリー下には、 app/models, app/views, app/controllers の3つのディレクトリーが置かれることになる。
  • 57. Modelの定義 app/models/Computer.java @Entity public class Computer extends Model { @Id public Long id; @Constraints.Required public String name; @Formats.DateTime(pattern="yyyy-MM-dd") public Date introduced; @Formats.DateTime(pattern="yyyy-MM-dd") public Date discontinued; @ManyToOne public Company company;
  • 58. # Home page GET / controllers.Application.index # Hello action GET /hello controllers.Application. sayHello public class Router Application extends Controller { @(message: String) Controller public static <h1>@message</h1> Result index() { …… @Entity Views Model public class Company extends Model { @Id public Long id; Play 2.0のMVC @Constraints. Required public String name;
  • 59. public static Result sayHello() { Form<Hello> form = form(Hello.class).bindFromRequest(); if(form.hasErrors()) { return badRequest(index.render(form)); } else { Hello data = form.get(); return ok( hello.render(data.name, data.repeat, data.color) ); } } app/controllers/Application.java JavaとScala def sayHello = Action { implicit request => helloForm.bindFromRequest.fold( formWithErrors => BadRequest(html.index(formWithErrors)), {case (name, repeat, color) => Ok(html.hello(name, repeat.toInt, color))} ) } app/controllers/Application.scala
  • 60. 「エンタープライズ・クラウドの現在」 資料 A) GlassfishのService Deploy B) GlassfishのAmazon EC2へのdeploy C) Play 2.0 Template Overview D) Play 2.0 routesファイル サンプル
  • 61. GlassfishのService Deploy Devoxx 2011での、JavaEE7のアーキテク トJerome Dochezのスライドから。
  • 62. 1.Application Introspection Application Virtual Cluster Introspection Creation まず、アプリケーションの提供する サービスを分析します。 次に、その分析結果に基づいて、 Virtual Clusterの生成に取り掛かり ます。 サービスのdeployまでの流れ
  • 63. 2. Virtual Cluster Creation Application Virtual Cluster Introspection Creation Virtual Nodeを作成し、 すべてのノード上に、 JavaEE7をインストール します。 Virtual Machines With JavaEE サービスのdeployまでの流れ
  • 64. 2. Virtual Cluster Creation Application Virtual Cluster Association Introspection Creation Virtual Nodeを作成し、 Load Balancerを置き Virtual Virtual ます。 Machines Machines 必要に応じてDatabase with Load with やMQ等の外部リソー Balancer Database スを置きます。 Service これで、次の段階の Virtual Machines Associationの準備が With 出来ました。 JavaEE サービスのdeployまでの流れ
  • 65. 3. Association Application Virtual Cluster Association Deployment Introspection Creation Load Balancer, JavaEEサーバー Virtual Virtual Databaseを関連 Machines Machines with 付けます。 with Load Balancer Database これで、アプリケ Service ーションのdeploy Virtual の準備が出来ま Machines した。 With JavaEE サービスのdeployまでの流れ
  • 66. 4. Deployment Application Virtual Cluster Association Deployment Introspection Creation JavaEEサーバー に、アプリケーシ Virtual Virtual ョンをdeployします。 Machines Machines with Load with Balancer Database Service Virtual Machines With JavaEE サービスのdeployまでの流れ
  • 67. クラウド・サービス開始 Application Virtual Cluster Association Deployment Introspection Creation Virtual Virtual Machines Machines with Load with Balancer Database Service Virtual Machines With JavaEE
  • 68. Glassfishの Amazon EC2へのdeploy https://wikis.oracle.com/download/at tachments/20876159/GlassFish+Paa S+Overview.odp?version=7&modifica tionDate=1301350954000 の中の一枚のスライドから
  • 69. Create Domain/Deploy Domain Manager 1. DAS Creation 3. Deployment IaaS Management Service 4. VM Creation AWS Plugin DAS 2. DAS Creation Elasiticity Orchestrator Amazon Web Services Manager 5. VM Creation GF Instance GF Instance 6. Add Node 7. Deployment
  • 70. Create Domain/Deploy Domain Manager PaaSの管理者は、まず、Domainをdeployします。 具体的には、Domain Managerを立ち上げます。
  • 71. Create Domain/Deploy Domain Manager 1. DAS Creation Domain Managerの最初の仕事は、 DAS(Domain Administration Service) IaaS Management Service を立ち上げることです。 AWS Plugin Domain Managerは、IaaS Management Service(IMS)を立ち上 げて、IMSはAWS Plug-inを通じて、 Amazon Web Serviceに働き掛け、 Amazon Web Services DASのインスタンスを生成しようとし ます。
  • 72. Create Domain/Deploy Domain Manager 1. DAS Creation IaaS Management Service AWS Plugin 2. DAS Creation DAS Amazon Web Services DASが出来ました。Domain Managerの次の仕事は、 生成されたDASのインスタンス上に、Orchestratorと Elasicity Managerという二つのサービスをdeployし、 それらを走らせることです。
  • 73. Create Domain/Deploy Domain Manager 3. Deployment IaaS Management Service AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager OrchestrtorとElasiticity Managerがdeployされました。 こうして動き始めたDAS(Domain Administration Service)の次の仕事は、 Glassfishが走るインスタンスを生成することです。
  • 74. Domain Manager IaaS Management Service 4. VM Creation AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager DASは、IMS(IaaS Management Service)に、Virtual Machineの生成を命じます。
  • 75. Domain Manager IaaS Management Service 4. VM Creation AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager 5. VM Creation IMSは、先ほどと同じく、AWS Plug-inを通じて、 Amazon Web Serviceに働き掛け、クラウド上に ノードを割り当て、それぞれのノードに Virtual Machineを生成します。 GF Instance GF Instance
  • 76. Domain Manager IaaS Management Service AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager 各ノードは、ノードが割り当てられると OrchestratorにAdd Nodeの報告をします・ GF Instance GF Instance 6. Add Node
  • 77. Domain Manager IaaS Management Service AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager Orchestratorは、それを受けると、 各ノード上のVMに、GlassFishの インスタンスをdeployします。 GF Instance GF Instance 7. Deployment
  • 78. Domain Manager IaaS Management Service AWS Plugin DAS Elasiticity Orchestrator Amazon Web Services Manager GF Instance GF Instance
  • 79. Create Domain/Deploy Domain Manager 1. DAS Creation 3. Deployment IaaS Management Service 4. VM Creation AWS Plugin DAS 2. DAS Creation Elasiticity Orchestrator Amazon Web Services Manager 5. VM Creation GF Instance GF Instance 6. Add Node 7. Deployment
  • 80. Play 2.0 Template Overview https://github.com/playframework/Pl ay20/wiki/JavaTemplates Play 1.xでは、Templateの記述にGroovy が用いられていたが、Play 2.0からは、 Scalaに変わった。
  • 81. TemplateファイルとScala function  Templateファイルは、次のような命名規則で Scala functionにコンパイルされる。 views/Application/index.scala.html generates views.html.Application.index
  • 82. Templateファイルから生成された ScalaコードのJavaからの呼び出し  次のTemplateファイルindex.scala.html から生成されたScala function indexを @(customer: Customer, orders: Seq[Order]) <h1>Welcome @customer.name!</h1> <ul> @for(order <- orders) { <li>@order.title</li> } </ul>  次のように、Javaから呼び出すことが出来る。 Html html = views.html.Application.index.render(customer, orders);
  • 83. Template Syntax Special character ‘@’  ‘@’は、Scala文の始まりを示す。文の終わり は指定する必要はなく、コードからPlayが、自 動的に推測する。青字部分が、Scalaコードと して解釈される。 Hello @customer.name! Hello @(customer.firstName + customer.lastName)! Hello @{val name = customer.firstName + customer.lastName; name}!  ‘@’のエスケープには、’@@’を使う。 My email is bob@@example.com
  • 84. Template Parameters  Templateは、結局は、Scalaのfunctionな ので、引数が必要である。  Templateの引数は、必ず、ファイルの第一 行で宣言されねばならない。 @(customer: models.Customer, orders: Seq[models.Order]) @(title: String = "Home") @(title:String)(body: => Html) @(title: String)(body: => Html)(implicit request: play.api.mvc.Request)
  • 85. Looping / If-Blocks  Templateの中で、for-comprehensionを 利用できる。この時、コンパイラーは、ブロック の前にyieldキーワードを挿入することに注意 <ul> @for(p <- products) { <li>@p.name ($@p.price)</li> } </ul> @if(items.isEmpty) { <h1>Nothing to display</h1> } else { <h1>@items.size items!</h1> }
  • 86. Declaring reusable blocks  Template中に、再利用可能なTemplateブ ロックを定義できる。 @display(product: models.Product) = { @product.name ($@product.price) } <ul> @products.map { p => @display(product = p) } </ul> @title(text: String) = @{ text.split(' ').map(_.capitalize).mkString(" ") } <h1>@title("hello world")</h1>
  • 87. Misc.  Declaring reusable values @defining(user.firstName + " " + user.lastName) { fullName => <div>Hello @fullName</div>}  Import statements @(customer: models.Customer, orders: Seq[models.Order]) @import utils.  Comments @********************* * This is a comment * *********************@
  • 88. Layout  views/main.scala.htmlがあれば、それが メインのレイアウト・ファイルになる。 @(title: String)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> </head> <body> <section class="content">@content</section> </body> </html> @main(title = "Home") { <h1>Home page</h1> views/Application/index.scala.html }
  • 89. @(title: String)(sidebar: Html)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> </head> <body> <section class="sidebar">@sidebar</section> <section class="content">@content</section> </body> </html> @main("Home") { @sidebar = { <h1>Sidebar</h1> <h1>Sidebar</h1> }{ } <h1>Home page</h1> @main("Home")(sidebar) { } <h1>Home page</h1> }
  • 90. Tags views/tags/notice.scala.html @(level: String = "error")(body: (String) => Html) @if(level == "success") { <p class="success"> @body("green") </p> } @if(level == "warning") { <p class="warning"> @body("orange") </p> } @if(level == "error") { @import tags._ <p class="error"> @body("red") @notice("error") { color => </p> Oops, something is } <span style="color:@color">wrong</span> }
  • 91. Play 2.0 routesファイル サンプル Playのrouteファイルは、Playのコンセプトを よく表している。 Play 2.0と一緒に配布されている、プログラ ム・サンプルから、routesファイルを抜き出し てみた。参考までサンプルの実行のスクリー ン・ショットを添付した。
  • 92.
  • 93.
  • 94. conf/routes # Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page GET / controllers.Application.index # Hello action GET /hello controllers.Application.sayHello # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file)
  • 95.
  • 96.
  • 97. # Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Default path will just redirect to the computer list GET / controllers.Application.index # Computers list (look at the default values for pagination parameters) GET /computers controllers.Application.list(p:Int ?= 0, s:Int ?= 2, f ?= "") # Add computer GET /computers/new controllers.Application.create POST /computers controllers.Application.save # Edit existing computer GET /computers/:id controllers.Application.edit(id:Long) POST /computers/:id controllers.Application.update(id:Long) # Delete a computer POST /computers/:id/delete controllers.Application.delete(id:Long) # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file)
  • 98.
  • 99.
  • 100. # Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # The home page GET / controllers.Projects.index # Authentication GET /login controllers.Application.login POST /login controllers.Application.authenticate GET /logout controllers.Application.logout # Projects POST /projects controllers.Projects.add POST /projects/groups controllers.Projects.addGroup() DELETE /projects/groups controllers.Projects.deleteGroup(group: String) PUT /projects/groups controllers.Projects.renameGroup(group: String) DELETE /projects/:project controllers.Projects.delete(project: Long) PUT /projects/:project controllers.Projects.rename(project: Long)
  • 101. POST /projects/:project/team controllers.Projects.addUser(project: Long) DELETE /projects/:project/team controllers.Projects.removeUser(project: Long) # Tasks GET /projects/:project/tasks controllers.Tasks.index(project: Long) POST /projects/:project/tasks controllers.Tasks.add(project: Long, folder: String) PUT /tasks/:task controllers.Tasks.update(task: Long) DELETE /tasks/:task controllers.Tasks.delete(task: Long) POST /tasks/folder controllers.Tasks.addFolder DELETE /projects/:project/tasks/folder controllers.Tasks.deleteFolder(project: Long, folder: String) PUT /project/:project/tasks/folder controllers.Tasks.renameFolder(project: Long, folder: String) # Javascript routing GET /assets/javascripts/routes controllers.Application.javascriptRoutes # Map static resources from the /public folder to the /public path GET /assets/*file controllers.Assets.at(path="/public", file)