23 Sep 2014, 06:00

Web サービスのアーキテクチャを学ぶ! coursera で Programming Cloud Services for Android Handheld Systems を受けた

内容について

全 10week 中,

  • 7week は C. Jules White さんのはなし.
  • 3week は Douglas C. Schmidt さんのはなし.

タイトルで Android と書いてあるにも関わらず, なんと Android の実装は出てこなかった.

ウェブアプリケーション技術を徹底解説

<div class="outline-text-3" id="text-2-1">
  <p>
    前半は, Jules さんの講義.Java の Spring フレームワークを例に, Web アプリケーション技術を網羅的に解説されるという,かなり実践的な内容.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">ウェブアプリケーション &#8211; Wikipedia</a>
    </li>
  </ul>
</div>

<div id="outline-container-sec-2-1-1" class="outline-4">
  <h4 id="sec-2-1-1">
    Spring Framework
  </h4>

  <div class="outline-text-4" id="text-2-1-1">
    <p>
      Spring フレームワークは, Java で Web アプリケーションを開発するさいの デファクトスタンダードだ.
    </p>

    <ul class="org-ul">
      <li>
        公式; <a href="http://projects.spring.io/spring-framework/">http://projects.spring.io/spring-framework/</a>
      </li>
      <li>
        <a href="http://ja.wikipedia.org/wiki/Spring_Framework">Spring Framework &#8211; Wikipedia</a>
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-2-1-2" class="outline-4">
  <h4 id="sec-2-1-2">
    幅広い Web 知識
  </h4>

  <div class="outline-text-4" id="text-2-1-2">
    <p>
      HTTP Protocol, サーブレット, セッションとクッキー, セキュリティと認証などなど, 幅広い知識が解説される.
    </p>

    <p>
      自分は, 以下の本を副読本として読んでいた.
    </p>

    <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
      <div class='amazlink-list' style='clear: both;'>
        <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
          <a href='http://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774142352' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/614GgCmIuPL._SL160_.jpg' style='border: none;' /></a>
        </div>

        <div class='amazlink-info' style='height:160; margin-bottom: 10px'>
          <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
            <a href='http://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774142352' rel='nofollow' target='_blank'>「プロになるための Web 技術入門」 &#8211;なぜ, あなたは Web システムを開発できないのか</a>
          </div>

          <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
            posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.09.23
          </div>

          <div class='amazlink-detail'>
            小森 裕介
          </div>

          <div class='amazlink-sub-info' style='float: left;'>
            <div class='amazlink-link' style='margin-top: 5px'>
              <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774142352' rel='nofollow' target='_blank'>Amazon</a> <img src='http://amazlink.fuyu.gs/icon_rakuten.gif' width='18' /><a href='http://hb.afl.rakuten.co.jp/hgc/g00q0724.n763w947.g00q0724.n763x2b4/archives/c=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F6416565%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Frms%2Fmsv%2FItem%3Fn%3D6416565%26surl%3Dbook' rel='nofollow' target='_blank'>楽天</a>
            </div>
          </div>
        </div>
      </div>
    </div>

    <ul class="org-ul">
      <li>
        <a href="http://futurismo.biz/archives/2575">HTTP も知らないのぉ~? にカチンときたら読むべき! プロになるための Web 技術入門を読んだ. | Futurismo</a>
      </li>
    </ul>

    <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
      <div class='amazlink-list' style='clear: both;'>
        <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
          <a href='http://www.amazon.co.jp/Spring3%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95Java%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%BB%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%A8%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E8%A3%95%E4%B8%80/dp/477415380X%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D477415380X' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/51aJP0oNtkL._SL160_.jpg' style='border: none;' /></a>
        </div>

        <div class='amazlink-info' style='height:160; margin-bottom: 10px'>
          <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
            <a href='http://www.amazon.co.jp/Spring3%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95Java%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%BB%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%A8%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E8%A3%95%E4%B8%80/dp/477415380X%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D477415380X' rel='nofollow' target='_blank'>Spring3 入門 &#8211;Java フレームワーク・より良い設計とアーキテクチャ</a>
          </div>

          <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
            posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.09.23
          </div>

          <div class='amazlink-detail'>
            長谷川 裕一
          </div>

          <div class='amazlink-sub-info' style='float: left;'>
            <div class='amazlink-link' style='margin-top: 5px'>
              <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/Spring3%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95Java%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%BB%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%A8%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E8%A3%95%E4%B8%80/dp/477415380X%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D477415380X' rel='nofollow' target='_blank'>Amazon</a> <img src='http://amazlink.fuyu.gs/icon_rakuten.gif' width='18' /><a href='http://hb.afl.rakuten.co.jp/hgc/g00q0724.n763w947.g00q0724.n763x2b4/archives/c=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F12055186%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Frms%2Fmsv%2FItem%3Fn%3D12055186%26surl%3Dbook' rel='nofollow' target='_blank'>楽天</a>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<div id="outline-container-sec-2-1-3" class="outline-4">
  <h4 id="sec-2-1-3">
    Assignments
  </h4>

  <div class="outline-text-4" id="text-2-1-3">
    <p>
      Assignments は 2 つ.
    </p>

    <p>
      1 つは, Spring を利用して mp3 をアップロードする Web サービスを作成す る. HTTP GET, POST をどのようにしてプログラミングするのかを理解で きた. Spring の Annotation が便利過ぎてビックリする.
    </p>

    <p>
      もう 1 つは, OAuth 2.0 による認証の実装. これは一度理解したけど,忘れてしまったな&#x2026;. orz.
    </p>
  </div>
</div>

ウェブアプリケーションのアーキテクチャを徹底解説

<div class="outline-text-3" id="text-2-2">
  <p>
    後半は, Doug 氏による, Pattern Oriented Software Archtecture のお話.
  </p>

  <p>
    C++ のネットワーク/Web アプリケーション用フレームワークである ACE を利 用しつつ, POSA2 の全パターンを次から次へと解説していく.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.cs.wustl.edu/~schmidt/ACE.html">The ADAPTIVE Communication Environment (ACE)</a>
    </li>
  </ul>

  <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
    <div class='amazlink-list' style='clear: both;'>
      <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
        <a href='http://www.amazon.co.jp/Pattern-Oriented-Software-Architecture-Concurrent-Networked-ebook/dp/B00CHK5SIA%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00CHK5SIA' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/41JQiq8T4QL._SL160_.jpg' style='border: none;' /></a>
      </div>

      <div class='amazlink-info' style='height:160; margin-bottom: 10px'>
        <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
          <a href='http://www.amazon.co.jp/Pattern-Oriented-Software-Architecture-Concurrent-Networked-ebook/dp/B00CHK5SIA%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00CHK5SIA' rel='nofollow' target='_blank'>Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects: Volume 2 (Wiley Software Patterns Series)</a>
        </div>

        <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
          posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.09.23
        </div>

        <div class='amazlink-detail'>
          Douglas C. Schmidt
        </div>

        <div class='amazlink-sub-info' style='float: left;'>
          <div class='amazlink-link' style='margin-top: 5px'>
            <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/Pattern-Oriented-Software-Architecture-Concurrent-Networked-ebook/dp/B00CHK5SIA%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00CHK5SIA' rel='nofollow' target='_blank'>Amazon</a>
          </div>
        </div>
      </div>
    </div>
  </div>

  <p>
    POSA2 については, 講義についていくために Kindle で購入.
  </p>

  <blockquote class="twitter-tweet" data-cards="hidden" lang="ja">
    <p>
      買った. Amazon Clowd Reader が便利だ:Douglas C. Schmidt 『 Pattern-Oriented Software&#8230; <a href="http://t.co/FPcev3N74p">http://t.co/FPcev3N74p</a>
    </p>

    <p>
      &mdash; きつね (@tsu_nera) <a href="https://twitter.com/tsu_nera/status/513282459069198336">2014, 9 月 20</a>
    </p>
  </blockquote>

  <p>
  </p>

  <p>
    また, ネットワークアーキテクチャの副読本として, 以下の本も読んだ.
  </p>

  <ul class="org-ul">
    <li>
      <p>
        <a href="http://futurismo.biz/archives/2572">TCP/IP ソケットプログラミングの基礎を集中学習! Working with TCP sockets を読んでる | Futurismo</a>
      </p>

      <div class='amazlink-box' style='text-align:left;padding-bottom:20px;font-size:small;/zoom: 1;overflow: hidden;'>
        <div class='amazlink-list' style='clear: both;'>
          <div class='amazlink-image' style='float:left;margin:0px 12px 1px 0px;'>
            <a href='http://www.amazon.co.jp/Working-With-Sockets-Jesse-Storimer-ebook/dp/B00BPYT6PK%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00BPYT6PK' target='_blank' rel='nofollow'><img src='http://ecx.images-amazon.com/images/I/51uNC60Jm4L._SL160_.jpg' style='border: none;' /></a>
          </div>

          <div class='amazlink-info' style='height:124; margin-bottom: 10px'>
            <div class='amazlink-name' style='margin-bottom:10px;line-height:120%'>
              <a href='http://www.amazon.co.jp/Working-With-Sockets-Jesse-Storimer-ebook/dp/B00BPYT6PK%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00BPYT6PK' rel='nofollow' target='_blank'>Working With TCP Sockets</a>
            </div>

            <div class='amazlink-powered' style='font-size:80%;margin-top:5px;line-height:120%'>
              posted with <a href='http://amazlink.keizoku.com/' title='アマゾンアフィリエイトリンク作成ツール' target='_blank'>amazlink</a> at 14.09.23
            </div>

            <div class='amazlink-detail'>
              Jesse Storimer
            </div>

            <div class='amazlink-sub-info' style='float: left;'>
              <div class='amazlink-link' style='margin-top: 5px'>
                <img src='http://amazlink.fuyu.gs/icon_amazon.png' width='18' /><a href='http://www.amazon.co.jp/Working-With-Sockets-Jesse-Storimer-ebook/dp/B00BPYT6PK%3FSubscriptionId%3DAKIAJDINZW45GEGLXQQQ%26tag%3Dsleephacker-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB00BPYT6PK' rel='nofollow' target='_blank'>Amazon</a>
              </div>
            </div>
          </div>
        </div>
      </div>
    </li>
  </ul>
</div>

<div id="outline-container-sec-2-2-1" class="outline-4">
  <h4 id="sec-2-2-1">
    Assignments
  </h4>

  <div class="outline-text-4" id="text-2-2-1">
    <p>
      POSA2 で解説される, 以下のパターンを実装する課題.
    </p>

    <ul class="org-ul">
      <li>
        Wrapper Facade
      </li>
      <li>
        Reactor
      </li>
      <li>
        Acceptor-Connector
      </li>
      <li>
        Half-Sync/Half-Async
      </li>
    </ul>

    <p>
      Java の Network 用フレームワーク, Netty を利用して実装した.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://netty.io/">Netty: Home</a>
      </li>
    </ul>
  </div>
</div>

感想について

HTTP Protocol の仕組みを理解できた

<div class="outline-text-3" id="text-3-1">
  <p>
    HTTP Protocol を理解できたことは有益だった.
  </p>

  <p>
    ブラウザを利用してネットを閲覧するという, 毎日当たり前のようにやっていることの裏側について, 自分は今まで理解していなかったのだ.
  </p>
</div>

オブジェクトストレージのアーキを理解できた

<div class="outline-text-3" id="text-3-2">
  <p>
    また, ストレージ業界に身をおく自分としては, オブジェクトストレージのアーキテクチャを垣間見たことは有益だった. 今までは, 本や WEB で知識を読んでもどうもピンとこなかった. コードから 学ぶことで,構造や機能が頭に思い浮かべられるようになった.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.ctc-g.co.jp/~ctcsp//sp/ostf_02.html">新たな潮流, オブジェクトストレージとは? 『オブジェクトストレージが求められる背景』</a>
    </li>
  </ul>
</div>

ネットワークアーキテクチャについて学べた

<div class="outline-text-3" id="text-3-3">
  <p>
    今仕事では, CIFS プロトコルを利用して ミドルウェアのアプリケーションを作成しようとしてる. ネットワークの知識がまるでない自分にとって, ネットワークの知識ことは差し迫った急務だった.
  </p>

  <p>
    そんな自分にとって, HTTP Protocol の仕組みや Archtectore Pattern を学ぶ機会は, 絶好のタイミングだった. ソケットプログラミングのアーキテクチャパターンなどは, すぐにでも仕事に応用できそうな知識だ.
  </p>

  <p>
    その一方で, POSA2 については消化不良も否めない. 折に触れて, 再度復習しなければと思う.
  </p>
</div>

学習メモ

最後に, POSA2 の主要パターンについて書いて終わりにしようと思う. POSA2 の本によると, まずは以下の最重要パターン 4 つを身につけようとのこと.

Wrapper Facade Pattern

<div class="outline-text-3" id="text-4-1">
  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/2613">Wrapper Facade Pattern について調べてみたまとめ | Futurismo</a>
    </li>
  </ul>
</div>

Acceptor-Connector Pattern

<div class="outline-text-3" id="text-4-2">
  <p>
    通信の初期化処理と実際の処理を分離することで, 構造を整理するパターン.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.cs.wustl.edu/~schmidt/PDF/Acc-Con.pdf">http://www.cs.wustl.edu/~schmidt/PDF/Acc-Con.pdf</a>
    </li>
  </ul>

  <p>
    Reactor Pattern において, Handler と Reactor の仲介を行う. Handler に Dispatch する前に, 一連の手続きが必要な場合には,
  </p>

  <ul class="org-ul">
    <li>
      Acceptor が Handler に対して手続きを実施してから (Accept)
    </li>
    <li>
      Reactor から Handler への Dispatch をさせる (Connect)
    </li>
  </ul>

  <p>
    Acceptor がサーバ側の仲介者, Connector がクライアント側の仲介者.
  </p>

  <p>
    クラス図的には,EventHandler のサブクラスに Handler や Acceptor, Connector がいる.
  </p>

  <p>
    EventHandler
  </p>

  <ul class="org-ul">
    <li>
      CifsAcceptor <ul class="org-ul">
        <li>
          negotiate
        </li>
        <li>
          session
        </li>
      </ul>
    </li>

    <li>
      CifsHandler <ul class="org-ul">
        <li>
          read
        </li>
        <li>
          write
        </li>
      </ul>
    </li>

    <li>
      CifsConnector <ul class="org-ul">
        <li>
          negotiate
        </li>
        <li>
          session
        </li>
      </ul>
    </li>
  </ul>
</div>

Reactor Pattern

<div class="outline-text-3" id="text-4-3">
  <ul class="org-ul">
    <li>
      <a href="http://futurismo.biz/archives/2616">Reactor Pattern について調べてみたまとめ | Futurismo</a>
    </li>
  </ul>
</div>

Active Object Pattern

<div class="outline-text-3" id="text-4-4">
  <p>
    メソッドの呼び出しとメソッドの実際の実行を分離することで並行性を導入する. 各オブジェクトは利用者からの要求を管理するための メッセージキューとスケジューラを持つ.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.cs.wustl.edu/~schmidt/PDF/Act-Obj.pdf">http://www.cs.wustl.edu/~schmidt/PDF/Act-Obj.pdf</a>
    </li>
  </ul>

  <p>
    外部の Client スレッドから非同期にメッセージを受け取っても, 自分固有の Active Object スレッドで, 自分の都合のいいタイミングで処理を実行させたい場合に利用する.
  </p>

  <p>
    起動 (invocation) と実行 (execution) の分離.
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> Active Object defines units of concurrency as service requests<br /> on components & runs service requests on a component in a different<br /> thread from the requesting client thread.<br /> [/sourcecode]
  </p>
</div>

<div id="outline-container-sec-4-4-1" class="outline-4">
  <h4 id="sec-4-4-1">
    他のパターンとの関係
  </h4>

  <div class="outline-text-4" id="text-4-4-1">
    <ul class="org-ul">
      <li>
        Acceptor-Connector / Reactor
      </li>
    </ul>

    <p>
      Acceptor-Connector Pattern における Handler 部分をスレッド化すればよい. (i.e. Thread per connection) Reactor の Minor Change で実現できる.
    </p>

    <ul class="org-ul">
      <li>
        Half-Sync/Half-Async Active Object はスレッド/ スレッドを分離する. Half-Sync/Half-Async は, 非同期プロセスと同期プロセスを分離する.
      </li>
    </ul>
  </div>
</div>

<div id="outline-container-sec-4-4-2" class="outline-4">
  <h4 id="sec-4-4-2">
    Sample
  </h4>

  <div class="outline-text-4" id="text-4-4-2">
    <p>
      Java のサンプル
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://en.wikipedia.org/wiki/Active_object">Active object &#8211; Wikipedia, the free encyclopedia</a>
      </li>
    </ul>

    <p>
      Ruby のサンプル
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://alpha-netzilla.blogspot.jp/2010/11/design-pattern.html">Blog Alpha Networking: マルチスレッド デザインパターン (Active Object パターン) Ruby 編</a>
      </li>
      <li>
        <a href="http://takuya-1st.hatenablog.jp/entry/20101124/1290573115">Ruby でマルチスレッド 14 #ActiveObject &#8211; それマグで!</a>
      </li>
    </ul>
  </div>
</div>