SlideShare a Scribd company logo
1 of 72
エンタープライズJava開発はこれからが面白い! 10年の歳月を経て、JavaEEプラットフォームは 実践的な開発プラットフォームへと進化した 2011/8/10 浅井 良
自己紹介 名前 浅井 良 現職 株式会社オージス総研  アドバンストモデリングソリューション部アーキテクトチーム所属 去年から達人プログラマーを目指してのブログを書いています。 http://d.hatena.ne.jp/ryoasai/ TwitterIDryoasai74 Googleアカウント ryoasai74
そうです、ワタシが JavaEE おじさんです。
本日のアジェンダ JavaEEの進化の歴史の振り返り(15分) JavaEE6アプリケーション開発で必要な主要開発技術の紹介(25分) JSF2.0 EJB3.1 JPA2.0 CDI 今後のエンタープライズJavaEE開発(10分) 一般的なSIの開発案件で 使えそうな組み合わせ
JavaEEの進化の歴史を振り返る
エンタープライズアプリケーションの形態の変化 ホストコンピューター+ダム端末(80年代) C/S構成のシステム(90年代~) Webアプリケーション(90年代後半~) Web2.0、SaaS、クラウド(2000年代~) 80年代 90年代 現在
エンタープライズシステムの特徴 複雑
コンポーネント があれば 幸せになれる!?
J2EEの当初の目標は分散コンポーネント開発基盤の標準化 ミドルウェアに対する標準API 関係データベースへのアクセス(JDBC) ネーミング・ディレクトリサービスへのアクセス(JNDI) 分散トランザクション(JTA、JTS) 通信基盤(RMI/IIOP、Webサービス、JMS) 標準プログラミングモデル JSP・サーブレット EJB
J2EEの複雑なプログラミングモデル 分散コンポーネントモデル 各機能単位にモジュールが別々のプロセスに分散 現在のSOAの考え方と似ている 状態を持ったオブジェクトがプロセスをまたいでメッセージをやり取りする オブジェクトの位置等価性 重たい 面倒 高コスト
初期のEJBでHelloWorldを作ると ①リモートコンポーネントインターフェースを定義する 決まった親インターフェースを継承 public interface Hello extends EJBObject {   String sayHello(String name)  throws RemoteException;  } 全メソッドでRemoteException送出を宣言
②ホームインターフェースを定義する 決まった親インターフェースを継承 public interface HelloHome extends EJBHome {  Hello create()      throws CreateException, RemoteException;  } 業務と無関係な例外送出を宣言
③EJB実装クラスを定義する 実装するのはHelloではない! public class HelloBean implements SessionBean {  private SessionContext context; public void setSessionContext( SessionContextaContext) {         context = aContext; } public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {}   public void ejbCreate() {} public String sayHello(String name) { return “こんにちは " + name; } } 業務的に意味のあるのは この部分だけ
④XMLデプロイメント記述子を作成する <?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">     <display-name>EJB2App-ejb</display-name>     <enterprise-beans>         <session>             <display-name>HelloBeanSB</display-name>             <ejb-name>HelloBean</ejb-name>             <home>hello.ejb.HelloHome</home>             <remote>hello.ejb.Hello</remote>             <ejb-class>hello.ejb.HelloBean</ejb-class>             <session-type>Stateless</session-type>             <transaction-type>Container</transaction-type>          </session>     </enterprise-beans>     … </ejb-jar>
呼び出し側も大変だった ①JNDIからホームオブジェクトをルックアップ public static HelloHomelookupHelloHome() { Context context = null;   try {     context = new InitialContext(); return (HelloHome) PortableRemoteObject.narrow( context.lookup("java:global/EJB2App/EJB2App-ejb/HelloBean!hello.ejb.HelloHome"), HelloHome.class);   } catch (NamingException ex) {     throw new RuntimeException(ex);   } finally {     if (context != null) {       try { context.close();       } catch (NamingException ex) {         throw new RuntimeException(ex);       }     }   } }
②ホームオブジェクトから EJBオブジェクトを作成して呼び出す Hello hello = null; try {   hello = helloHome.create();  return hello.sayHello(name);  } catch (CreateException ex) {   throw new RuntimeException(ex); } catch (RemoteException ex) {   throw new RuntimeException(ex); } finally {   if (hello != null) {     try { hello.remove();     } catch (RemoteException ex) {       throw new RuntimeException(ex);     } catch (RemoveException ex) {       throw new RuntimeException(ex);     }   } } 業務的に意味のあるのは この行だけ
重量Javaのせいで多くのプロジェクトが失敗した
J2EE関連のデザインパターンの登場 プロジェクトの失敗は仕様自体の問題ではなく、アプリケーションの設計が不十分なため? パターンによりJ2EE開発のベストプラクティスを学ぼうという雰囲気があった。 18 EJBデザインパターン Floyd Marinescu (著)  J2EEパターン 第2版 Deepak Alur (監修), John Crupi (著), Dan Malks (著)
軽量Javaフレームワークへのパラダイムシフト(2003年~) Springを作ったRodJohnsonの「ハゲ本」 開発生産性で不満のたまった優秀な開発者の間から、J2EE仕様自体の問題点が公に議論されるようになった。 POJO EoD 軽量Java expert one-on-one J2EE Development without EJB Rod Johnson(著)
JavaEE5標準に対する軽量Javaの考え方の導入 2006年にようやく登場のJavaEE5標準では開発簡易化(EoD)が重視された EJBをPOJOとして開発 一部にDI・AOPの考え方を導入 アノテーションの利用によるxmlファイルの削減
EJB3でHelloWorldを作ると ①ビジネスインターフェースを定義する @Remote public interface Hello {    String sayHello(String name) ;  }
②ビジネスインターフェースの実装クラスを定義する アノテーションだけでEJBとして登録される。 XMLファイルの設定は不要。 普通にビジネスインターフェースを実装 @Stateless public class HelloBean implements Hello {    public String sayHello(String name) {     return “こんにちは " + name;   } }
③インジェクションして普通に呼び出す @EJB private Hello hello;  public void someMethod() { ...     String message = hello.sayHello("Test"); ... } アノテーションを使ってインジェクションする。 普通にメソッドを呼び出す。
見かけは簡単になったけど EE5対応のAPサーバは以前よりさらに巨大で重たくなった気がする 動作確認するにはearファイルにパッケージ化する必要がある 結合試験の自動化が意外に困難 DIやAOPが使えるのは一部の重量コンポーネント(EJB、サーブレットなど)に限られる プレゼン層とビジネス層のコンポーネントモデルがまったく異なる 肝心の互換性が少ない 結局JavaEEは 使えないんじゃ?
そして、JavaEE6の時代へ EE5から3年半たって2009年12月に策定 開発をさらに簡易化させるアイデアが多数盛り込まれている SeamやFaceletsなどEE5の弱点を補足するフレームワークのしくみを導入 OSSの開発コミュニティが主導で、本当に便利で必要な機能が追加されている 余分な機能の削除によるさらなる軽量化 Webプロファイル Pruning(使われなくなった仕様の間引き)
なによりも本当に軽量なJavaEE6サーバーが登場
でも、JavaEE6で 本当にまともに 開発できるの?
JavaEE6開発の主要技術の紹介
JavaEE6だけでWebアプリケーションを作るとどうなるか? JavaEE6は便利になったと言われるが、フルスタックのサンプルがなかなか見当たらない 画面 ビジネスロジック データアクセス 試験 そこで、JsfScrumToyというJSFのサンプルをリファクタリングしてどこまで簡単にできるかPOCを実施
実際に組み合わせを検証したJavaEE6の技術 Webプレゼンテーション -> JSF2.0 トランザクション管理 -> EJB3.1 データアクセス -> JPA2.0 DI、コンポーネント管理 -> CDI 試験 -> JUnit、埋め込みGlassfish
Webアプリケーションとは? Webアプリ ,[object Object]
本質的にステートフル狭義の Webアプリ JSF Webサイト ,[object Object],サーブレット・JSP Webサービス ,[object Object]
基本的にステートレスJAX-WS、JAX-RS
Webフレームワークの分類 アクションベース VS コンポーネントベース
主要Webフレームワークの位置づけ S2Struts Struts1 設定簡易化 アクション ベース Struts2 SAStruts 会話状態サポート Spring MVC Spring WebFlow Web MVC FW Spring Faces JSF 会話状態サポート コンポーネント ベース Seam Tapestry 設定簡易化 Teeda Wicket Click
アクションベースFW HTTPリクエスト HTTPリクエスト解析 アクション 業務ロジック HTTPレスポンス HTTPレスポンス生成
UIコンポーネントツリーと管理Bean UIコンポーネントツリー UIViewRoot 管理Bean 管理Bean UIForm 値取得 UIOutputText 値設定 UIInputText 管理Bean UICommandButton アクション起動
コンポーネントベースFWの存在意義 リッチな画面部品(カレンダーなど)の再利用が容易 VBのように、部品さえ用意すれば、簡単にロジックを呼び出せる ボタンや入力項目が大量についている画面が大量にあるようなアプリには適する 社内C/Sアプリ のWeb化に適する
以前はいまいちだったけど、 JSF2は前バージョンから大幅に改良されている!
38 Faceletsを使った画面テンプレート化 ほとんどのWeb画面では、メニューバーやサイドバー、フッターなどがパターン化されている 画面が増えてくると、毎回同様のxhtmlファイルを作成するのは面倒 JSF2.0ではFaceletsを採用することで、テンプレート化が簡単に行えるようになった
画面テンプレートの定義例 <html …> <head> … <ui:insert name="head"/>   </head>   <body> …     <div class="body"> <ui:insert name="body"/>     </div>   </body> </html> template.xhtml
個別画面の定義例 hello.xhtml <html …> <ui:composition template="/layout/template.xhtml"> <ui:define name="body">     <h1>こんにちは世界!</h1> </ui:define> </ui:composition> </html>
コンポジットコンポーネント 画面中で繰り返し出現するパターンを抜き出して「タグリブ化」することが可能 部品定義をxtmlで通常の画面と同様に作成し、以下のフォルダに格納するだけでよい Webアプリルート/resources JSP2.0のタグファイルに近い方法で気軽に画面部品を作成できるようになった
コンポジットコンポーネントの定義例 link.xhtml <html …>  <composite:interface>     <composite:attribute name="value“ />     <composite:attribute name="outcome"/>   </composite:interface> <composite:implementation>     <h:link       outcome="#{cc.attrs.outcome}" value="#{cc.attrs.value}">       <f:param name="cid“         value="#{javax.enterprise.context.conversation.id}"/>     </h:link> </composite:implementation> </html> パラメーターを宣言 部品の中身を定義
コンポジットコンポーネントの利用例 create.xhtml <html ...      xmlns:scrum="http://java.sun.com/jsf/composite/components"> ... <scrum:link   outcome="/project/show"   value="プロジェクト一覧" /> ... </html>
JSF1.2までの画面遷移定義 JSF1.2まではすべての画面遷移ルールをxmlで定義する必要があった <navigation-rule>     <description>         sprint navigation rules     </description>     <from-view-id>/sprint/show.xhtml</from-view-id>     <navigation-case>         <from-outcome>showStories</from-outcome>         <to-view-id>/story/show.xhtml</to-view-id>     </navigation-case>     <navigation-case>         <from-outcome>showDashboard</from-outcome>         <to-view-id>/dashboard/show.xhtml</to-view-id>     </navigation-case> </navigation-rule> faces-config.xml
暗黙ナビゲーション JSF2.0ではほとんどの場合遷移先のビュー名を直接記述した方が便利 SprintAction.java public String showSprints(Project project) { selectCurrentEntity(project);   return "/sprint/show?faces-redirect=true"; } 拡張子は省略可 ?faces-redirect=trueを付けるとHTTPリダイレクトする
BeanValidation(JSR303) public class Task extends AbstractEntity implements Serializable{ …     @NotNull     @Size(min=0, max=128)     private String name; アノテーションを付けるだけで単項目のバリデーションが行われる。
Ajax機能を簡単に利用 <h:panelGroup>   <h:inputText id=“endDate” value=“#{currentProject.endDate}”>   <f:convertDateTime pattern=“yyyy/MM/dd" /> <f:ajax event="blur" render="endDateError" /> </h:inputText>   </h:panelGroup> <h:message id="endDateError" for="endDate" styleClass="errorMessage" /> このように書くとblur、 つまり、フォーカスが外れた段階でAjaxリクエストが送信され、結果がエラーメッセージに反映される。
その他細かい改良点が多数 Enumのリストを直接選択項目としてバインドできるようになった 以前はわざわざSelectItemのリストに変換する必要あり POJOのリストを直接テーブルに表示できるようになった 以前はDataModelに変換する必要があり 選択行は直接アクションメソッドのパラメータとして簡単に受け取れる
EJB3.1=ちょっと特殊な能力を持ったPOJO 以前はEJB=ビジネスコンポーネント=面倒 最新のEJB3.1はちょっと特殊な能力を持ったPOJOに過ぎない トランザクション リモート呼び出し 同時実行 タイマー実行 非同期実行
さらに、EJB3.1では インターフェースはオプション Warファイル中に格納可能 Earファイルは単純な Webアプリでは不要
EJB3.1を使った非同期実行 呼び出し側のスレッドをブロックせずに時間のかかる処理を実行 @Stateless  public class OrderProcessBean { @Asyncronous    public void registerOrder(Order order) {     ...    } } 戻り値の型はvoidかFuture型
EJB3.1を使ったタイマー実行 EJB3.1で新登場の シングルトンBean @Singleton public class LogCleanUpBean { @Schedule(minute="1", hour="*")     public void cleanUpOldLogs() {     ...    } } CRON的な宣言で簡単に定期実行可能
JPAを使ったデータアクセス JPA = Java Persistence API O/Rマッピングの標準化
JPAを使うと何がよいのか? 静的なインピーダンスミスマッチの解決 継承などを駆使した複雑なドメインモデルをテーブルにマッピングできる 動的なインピーダンスミスマッチの解決 エンティティの状態変更を適切なタイミングと粒度でテーブル更新に変換してくれる エンティティに複雑な状態変更などの振る舞いを持たせられる DDDと相性がよい! ※DDD=DomainDrivenDevelopment
ドメイン駆動型設計(DDD) 流通、販売など業務固有の処理こそが最も大切で複雑な部分 コアの業務ドメインに優秀な開発者を割り当てて時間をかけてあるべきモデルに進化させていく
Story Task ID=null ID=null Task 永続コンテキスト ID=null Story Project ID=3 ID=101 Task Sprint ID=9 Story ID=11 ID=10 Project ID=101 DB 永続コンテキスト中のエンティティの状態はDBと自動的に同期される。
JPA2.0の新機能 JPA2では細かい改良と機能追加が行われている キャッシュの標準化 悲観ロックの標準化 クライテリアクエリAPIの標準化 より柔軟なドメインモデルのマッピング Stringなど値コレクションのマッピング Mapを使ったマッピング方式の拡張
JavaEEでちょっと複雑な「Bean」について JavaEE仕様の中ではBeanという言葉が様々な仕様で使われている EnterpriseJava Bean(EJB) JSFの管理Bean (@javax.faces.bean.ManagedBeanで定義) JSR250で新たに登場した管理Bean ( @javax.annotation.ManagedBeanで定義) 意味が不統一なだけでなく、お互いに連携させるのも困難
一方で、SpringやSeamでは レイヤーに関係なく、ほぼすべてのPOJOをBeanとしてコンテナに登録できる Bean同士はお互いに統一された方法で連携させることができる やはり、Java EE6はイマイチなのか?
JavaEE6でBeanを統一的に扱う切り札となるCDI CDI=Contextsand Dependency Injection beans.xmlファイル(空でもよい)をモジュール内に格納することでCDI機能が有効になる CDIを有効にすると、ほとんどのPOJO・EJBをすべて統一的にBeanとして扱うことができるようになる
CDIのBeanの例 Beanの有効 なスコープを定義 JSFのビューから 参照する名前を定義 一定の条件を満たせば自動的にCDIのBean @Named @ConversationScoped public class SprintAction implements Serializable {       @Inject ScrumManagerscrumManager; @Inject SprintRepositorysprintRepository; … } 任意のBeanは@Injectで注入
CDIのBeanのスコープ CDIのBeanはスコープを持てる @RequestScoped @SessionScoped @ApplicationScoped @ConversationScoped Singleton、Dependent疑似スコープ 独自のスコープを定義して拡張することも可能
JavaEE6と試験自動化 Java EE6のコンポーネントは大部分POJO 従って、JUnitとモックオブジェクトを使って容易に単体試験可能 加えて、軽量な埋め込みコンテナを利用することで、トランザクションやDB接続を行う結合試験の自動化もできる JeeUnitやArquillianなどを利用すると、CDIによりいっそう楽になる
今後のエンタープライズJava開発
ところで、日本のSI業界では JavaEEの技術(プログラミングモデルの部分)は主に海外で利用され、発展してきた そもそも、日本のSI業界の事情は違うのでは そもそも、コンポーネント化や多層分散アーキテクチャのシステムはほとんどなかったのでは? 大規模だが、モノリシックなアーキテクチャを強制するフレームワークが蔓延
SI業界の残念な実情 FN1002Commandのようなレガシーなクラス名の規約 10000行を超えるクラスがあってもリファクタリングしない(できない) 業務ロジックはexecute()メソッド内に記述、勝手にメソッドを分割できない 今でも新規案件をJDK1.4で開発
海外はオーバーエンジニアリング 海外だと、アーキテクトの権限が強いことが多く、過剰な設計となりがちだった? 過剰なレイヤ、ティア分割、分散化 面倒だけど頑張ってコンポーネント化、ドメインモデリングしていた?(Sessionファサードパターン)
日本はアーキテクチャ軽視 日本だと、適切なアーキテクチャが施行されていないケースも多い 1機能1クラス(コマンドパターン) Excelから全クラスと設定を自動生成 箱はたくさん分かれているが、論理的なレイヤー構造やコンポーネント構造はなし
開発簡易化(EoD)の真の意味 従来の大変だけれどつまらない単純作業から開発者が解放される 単純な値の詰め替え 冗長な設定ファイルの記述 サービスの粒度などを自由に設計できる ドメイン駆動型設計など複雑な業務ドメインをモデル化 つまり「頭を使う必要がある」ということ
EoDと生産性の関係 生産性・保守性 SOA、 TDD、 ドメイン駆動型 アジャイルの開発 日本のSI業界的な 労働集約型、 ウォーターフォール コピペ中心の開発 EoD技術の進化

More Related Content

What's hot

concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識Hishikawa Takuro
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Tomohito Adachi
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターンHiroshi Kurokawa
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分松田 千尋
 
Brush up your Coding!
Brush up your Coding!Brush up your Coding!
Brush up your Coding!Shogo Sensui
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 arisu yano
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!Sakae Saito
 

What's hot (12)

concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターン
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
 
Brush up your Coding!
Brush up your Coding!Brush up your Coding!
Brush up your Coding!
 
WordPressとjQuery
WordPressとjQueryWordPressとjQuery
WordPressとjQuery
 
Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
 

Viewers also liked

JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?Edward Burns
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)Pavel Bucek
 
CON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouCON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouEdward Burns
 
WebSocketことはじめ
WebSocketことはじめWebSocketことはじめ
WebSocketことはじめKohei Kadowaki
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話disc99_
 
初めての単体テスト
初めての単体テスト初めての単体テスト
初めての単体テストBasuke Suzuki
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようNorito Agetsuma
 
データマイニング入門
データマイニング入門データマイニング入門
データマイニング入門hrfm
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugToshiaki Maki
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門Ryo Miyake
 

Viewers also liked (14)

JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)
 
CON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To YouCON5898 What Servlet 4.0 Means To You
CON5898 What Servlet 4.0 Means To You
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
WebSocketことはじめ
WebSocketことはじめWebSocketことはじめ
WebSocketことはじめ
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
初めての単体テスト
初めての単体テスト初めての単体テスト
初めての単体テスト
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
 
データマイニング入門
データマイニング入門データマイニング入門
データマイニング入門
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
 
APIs: The New Security Layer
APIs: The New Security LayerAPIs: The New Security Layer
APIs: The New Security Layer
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
API Management and Kubernetes
API Management and KubernetesAPI Management and Kubernetes
API Management and Kubernetes
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門
 

Similar to Glassfish勉強会(JavaEE6について)

Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテストTomonori Yamada
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Akira Inoue
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術ina job
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦urasandesu
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみたMori Shingo
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門Yohta Kanke
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talkmitamex4u
 
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化Akira Inoue
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうTomomitsuKusaba
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめるShuhei Iitsuka
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
20150829 Java女子部勉強会配付資料
20150829 Java女子部勉強会配付資料20150829 Java女子部勉強会配付資料
20150829 Java女子部勉強会配付資料Misaki Kajiura
 

Similar to Glassfish勉強会(JavaEE6について) (20)

Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
Visual studio de debug
Visual studio de debugVisual studio de debug
Visual studio de debug
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 
もしトラ
もしトラもしトラ
もしトラ
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
 
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
 ぼく(たち)のかんがえた最新のJS開発環境 #scripty04 ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
ぼく(たち)のかんがえた最新のJS開発環境 #scripty04
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
20150829 Java女子部勉強会配付資料
20150829 Java女子部勉強会配付資料20150829 Java女子部勉強会配付資料
20150829 Java女子部勉強会配付資料
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Glassfish勉強会(JavaEE6について)