57
WebLogic 12c WebLogic 12c JavaEE6 JavaEE6 祝祝 祝祝

Glass fishで作ったアプリをweblogicに移植してみた

Embed Size (px)

DESCRIPTION

#wlstudy

Citation preview

Page 1: Glass fishで作ったアプリをweblogicに移植してみた

祝 祝 WebLogic 12cWebLogic 12cJavaEE6JavaEE6 対応対応

Page 2: Glass fishで作ったアプリをweblogicに移植してみた

JavaEE6JavaEE6 で作ったで作ったアプリケーションをアプリケーションをGlassFishGlassFish からから WebLoWebLo

gicgic にに移植してみた移植してみた

久保智久保智タイトル長すぎる・・・・

Page 3: Glass fishで作ったアプリをweblogicに移植してみた

こんにちは。

Page 4: Glass fishで作ったアプリをweblogicに移植してみた

自己紹介自己紹介• 名前 久保智• Twitter_id @megascus• Java が好きです。• 仕事では Java 書いてません。• JavaEE6 で作りたい・・・・・• Weblogic 経験延べ 20 時間 ( これ作ってる時間だけ )

Page 5: Glass fishで作ったアプリをweblogicに移植してみた

注意点注意点•これは個人がやってみた範囲での内容です。

•内容については Oracle社には問い合わせをしないでください。

• Java SE6はオワコンなので、実際に動作させる場合は Java SE7を使用してください。

Page 6: Glass fishで作ったアプリをweblogicに移植してみた

概要概要• GlassFish 上で動くように作成されたウェ

ブアプリケーションを WebLogic で動くようにするまでの記録です。

• GlassFish3.1.1+Derby から WebLogic 12c+OracleDB へ移植しました。

• 趣旨としては JavaEE6 は便利なので、とりあえず動くものを体験して JavaEE6 で作ろうぜ。

Page 7: Glass fishで作ったアプリをweblogicに移植してみた

GlassFishGlassFish って何?って何?• 2009 年 10 月に JavaEE6 に対応していた

ウェブアプリケーションサーバー。• JavaEE6 の RI( 参照実装 ) 。• NetBeans インストールするとついてくる。• 基本無料。• だけど Oracle 社のサポートも受けられる

よ。• 詳しくは Oracle 社営業まで !

Page 8: Glass fishで作ったアプリをweblogicに移植してみた

今回移植したアプリケーション今回移植したアプリケーション•名前: jsf-scrumtoys-refactord• JavaEE6の基本機能だけで作成。• JavaEE6の入門としては最適。詳しくは達人プログラマーを目指してhttp://d.hatena.ne.jp/ryoasai/20110724/1311522072

Page 9: Glass fishで作ったアプリをweblogicに移植してみた

ということで

やってみた

Page 10: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (1)(1)

動くわけがないと知りつつ動かしてみる。管理コンソールからデプロイ。

Page 11: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (2)(2)

デプロイメント→制御→インストールからwarを選択してデプロイ。

Page 12: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (3)(3)

準備完了になったので選択して起動してみる。

Page 13: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (4)(4)

エラー

Page 14: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (5)(5)

そういえば、 DB の設定してなかったよねーということで、 OracleDB への JDBC接続を作成。

作成方法の詳細はOracle WebLogicServer 11g構築・運用ガイドを参照#ステマ

Page 15: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (6)(6)

JDBC データソースをアプリに設定してみる。デプロイメント→ scrumtoys→ 構成→永続性

→ scrumToysPU→ データ・ソースから JTA データソースを設定

※GlassFish のデフォルトのデータソースの名前に併せてます。

Page 16: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (7)(7)

エラー

Page 17: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (8)(8)

しょうがないのでアプリケーションに手を加える。

META-INF/persistence.xmlに jta-data-source の設定を追記。

※GlassFish のデフォルトのデータソースの名前に併せてます。

Page 18: Glass fishで作ったアプリをweblogicに移植してみた

1.1. 何も変更せずに何も変更せずにwarwar をデプロイしてみるをデプロイしてみる (9)(9)

デプロイしなおす。

アクティブに ( ゚∀゚ )

Page 19: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (1)(1)せっかく動いたので、そのままアクセスしてみる。

http://localhost:7001/scrumtoys/home.jsfここで動いて、終了の予定でした・・・・

Page 20: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (2)(2)

Page 21: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (3)(3)org.jboss.weld.exceptions.CreationException: WELD-000079 Could not find the EJB in JND

I: class jsf2.demo.scrum.application.scrum_management.impl.ScrumManager$772932747$Proxy$_$$_Weld$Proxy$ at org.jboss.weld.bean.SessionBean.create(SessionBean.java:303) at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:107) at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:89) at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:104) at org.jboss.weld.proxies.ScrumManager$772932747$Proxy$_$$_WeldClientProxy.reset(ScrumManager$772932747$Proxy$_$$_WeldClientProxy.java) at jsf2.demo.scrum.web.controller.scrum.ProjectAction.reset(ProjectAction.java:122) at jsf2.demo.scrum.web.controller.scrum.316313216$Proxy$_$$_WeldSubclass.reset(316313216$Proxy$_$$_WeldSubclass.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

~~~

Page 22: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (4)(4)

jsf2.demo.scrum.web.controller.scrum.ProjectAction.reset(ProjectAction.java:122)

ProjectAction.reset の呼び出しあたりが怪しい。

Page 23: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (5)(5)実際にソースを見るとこんな感じ。

・・・・・・見慣れないアノテーションが。これは CDIのアノテーション。

Page 24: Glass fishで作ったアプリをweblogicに移植してみた

余談:余談: CDICDI の簡単な説明の簡単な説明 (1)(1)• JavaEE6 での新機能。• CDI とは Contexts and Dependency Injection の

略で以前は WebBeans と呼ばれていた。• 今まで JavaEE の範囲だと Servlet 等しか DI で

きなかったのを広範囲に拡張したもの。• オブジェクトのスコープの制御もできて便利。• JavaEE6 の ( 個人的 ) 目玉機能の一つ

Page 25: Glass fishで作ったアプリをweblogicに移植してみた

余談:余談: CDICDI の簡単な説明の簡単な説明 (2)(2)使い方 ( 一例 )1. WEB-INF/beans.xml を作成。2. Injection したいクラスに @Named アノ

テーションを記述。3. Injection 先に @Inject アノテーションを

記述。これだけで DI が!もう Seaser とか Spring とかいらない!

Page 26: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (6)(6)CDI が怪しい?ということで、 SessionBean につ

いている @Inject アノテーションを @EJB に付け替えてみる。

※JavaEE5 の範囲です。

Page 27: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (7)(7)

※注意今回 EJB以外も色々インジェクションしているので、これで動かなかったら詰み!

心は折れてます。

Page 28: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (8)(8)動きました。 (ただしエラー )

Page 29: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (9)(9)

エラーは置いておいて

Page 30: Glass fishで作ったアプリをweblogicに移植してみた

アクセスしてみるアクセスしてみる (10)(10)• どうも CDI 使用して継承したクラスの親

のメソッドを呼び出すとエラーになるらしい。

• 今回 EJB のインジェクションに失敗したのはたまたま。

• WebLogic の修正パッチお待ちしております。

調べていただいた某お方ありがとうございます。

Page 31: Glass fishで作ったアプリをweblogicに移植してみた

余談:余談: AjaxAjax 対応対応JavaEE6(JSF2.0) では Ajax に対応しました。使い方はそのまま、<h:ajax>タグを使用するだけ。※ ただし、機能はそれほど多くないので、

RichFacesや PrimeFaces 等を追加で使ったほうがいいです。

※ 今回のエラーの原因は多分これ。

Page 32: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (1)(1)

JavaScriptのエラーが解消すれば動くはず。

Page 33: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (2)(2)

しかし原因が思いつかない

Page 34: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (4)(4)

どうすれば

Page 35: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (4)(4)

そういえば

Page 36: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (5)(5)別件でこんなリプライをもらったことが。

※念のため名前にはモザイクをかけています

Page 37: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (6)(6)

weblogic.xml を入れて起動。

Page 38: Glass fishで作ったアプリをweblogicに移植してみた

動かしてみる動かしてみる (7)(7)うごいた!

Page 39: Glass fishで作ったアプリをweblogicに移植してみた

移植のまとめ移植のまとめ• JDBC 接続プールを作成するのを忘れずに。• CDI は現状動作が怪しいのでパッチ待ち。• weblogic.xml がないと Ajax でエラー。

Page 40: Glass fishで作ったアプリをweblogicに移植してみた

おまけ

Page 41: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAについてについて• 今回、 GlassFish から Weblogic への移植

と同時に DB を Derby から OracleDB に変更。

• DMLや DDL 等 SQL は一行も修正せずに移植している。

• そもそも SQL なんて使用していない。

→JPA のおかげ

Page 42: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (1)(1)•正式名称 :Java Persistence API• Hibernate等いろいろある O/Rマッピングツールを標準仕様化したもの。

• JavaEE5では v1.0だったのが JavaEE6では v2.0に。

• SQLを書かなくてよくなる分、開発コストは削減できる。

Page 43: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (2)(2)• DB 移行なんて今まで現実的ではなかった

けど、今回無修正でできたよ!• アプリ作成当初は MySQL で作成して、高可用性が必要になったら OracleDB へ乗り換えるとかも現実的な範囲で出来る!

• iBatis なんて不完全な O/Rマッピングツールはもう古い。 SQL直書きで DAOパターンは太古の技術。

Page 44: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (3)(3)•最近流行っている Play! Frameworkや、 G

oogle Apps Engine でも使用されている。• 今後、主流になるのは間違いないので、

まだやったことがない人も必ず触っておいてください。

※ もうすでに主流というツッコミは無しで

Page 45: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (4)(4)実際のソースはこんな感じ。アノテーションで DBとのマッピングを指定。

Page 46: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (5)(5)• insert はこんな感じ。

em.persist(entity);

Page 47: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (6)(6)• update はこんな感じ。

em.merge(entity);

Page 48: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (7)(7)• delete はこんな感じ。

em.delete(entity);

Page 49: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (8)(8)

簡単でしょう?

Page 50: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPAって何?って何? (9)(9)

とりあえず試してみては?

Page 51: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPA使用上の注意使用上の注意 (1)(1)• JPA1.0は機能が弱いので、 1.0しか使用できない場合は使用しないほうが良い。

•その場合は、 Hibernate等を直接使用する方がおすすめ。

•使うならぜひ 2.0を。Weblogic10.3.4から使えるよ。

Page 52: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPA使用上の注意使用上の注意 (2)(2)• すでに設計してある DB に適用する場合相性が非常に悪い場合がある。

•非常に沢山のテーブルが数珠のように延々とつながっている場合はあまり使わないほうが良い。

• そんな DB は設計が悪い。 ( ー `д ー ´) キリッ

Page 53: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPA使用上の注意使用上の注意 (3)(3)•既存のものに使うなら JPA に合わせる形

である程度設計変更する気持ちで。• DDD(Domain Driven Design) とは相性が良

いので、そちらも併せて。

Page 54: Glass fishで作ったアプリをweblogicに移植してみた

JPAJPA使用上の注意使用上の注意 (4)(4)•裏では SQLが流れているので、開発は

SQLを見ながら!

Page 55: Glass fishで作ったアプリをweblogicに移植してみた

まとめまとめ• JavaEE6便利なので使用してください。•せっかく動くものがあるので、ぜひ使用しながら覚えてください。

•個人的には JPAだけでも使用して欲しい。• Java SE6はオワコン。•以下自重。

Page 56: Glass fishで作ったアプリをweblogicに移植してみた

まとめのおまけまとめのおまけやっと JavaEE6の日本語本が出ました。使用する場合はお供に!

Page 57: Glass fishで作ったアプリをweblogicに移植してみた

ご清聴ありがとうございました。