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

3,480 views

Published on

#wlstudy

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,480
On SlideShare
0
From Embeds
0
Number of Embeds
1,058
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. 祝WebLogic 12cJavaEE6 対応
  2. 2. JavaEE6 で作ったアプリケーションを GlassFish から WebLogic に 移植してみた 久保智 タイトル長すぎる・・・・
  3. 3. こんにちは。
  4. 4. 自己紹介• 名前 久保智• Twitter_id @megascus• Java が好きです。• 仕事では Java 書いてません。• JavaEE6 で作りたい・・・・・• Weblogic 経験延べ 20 時間 ( これ作ってる時間だけ )
  5. 5. 注意点• これは個人がやってみた範囲での内容で す。• 内容については Oracle 社には問い合わせ をしないでください。• Java SE6 はオワコンなので、実際に 動作させる場合は Java SE7 を使用し てください。
  6. 6. 概要• GlassFish 上で動くように作成されたウェ ブアプリケーションを WebLogic で動く ようにするまでの記録です。• GlassFish3.1.1+Derby から WebLogic 12c+OracleDB へ移植しました。• 趣旨としては JavaEE6 は便利なので 、とりあえず動くものを体験して JavaEE6 で作ろうぜ。
  7. 7. GlassFish って何?• 2009 年 10 月に JavaEE6 に対応してい たウェブアプリケーションサーバー。• JavaEE6 の RI( 参照実装 ) 。• NetBeans インストールするとついてく る。• 基本無料。• だけど Oracle 社のサポートも受けられる よ。• 詳しくは Oracle 社営業まで !
  8. 8. 今回移植したアプリケーション• 名前: jsf-scrumtoys-refactord• JavaEE6 の基本機能だけで作成。• JavaEE6 の入門としては最適。詳しくは達人プログラマーを目指してhttp://d.hatena.ne.jp/ryoasai/20110724/1
  9. 9. ということでやってみた
  10. 10. 1. 何も変更せずに war をデプロイしてみる (1)動くわけがないと知りつつ動かしてみる。管理コンソールからデプロイ。
  11. 11. 1. 何も変更せずに war をデプロイしてみる (2)デプロイメント→制御→インストールから war を選択してデプロイ。
  12. 12. 1. 何も変更せずに war をデプロイしてみる (3)準備完了になったので選択して起動してみ る。
  13. 13. 1. 何も変更せずにwar をデプロイしてみる (4)エラー
  14. 14. 1. 何も変更せずに war をデプロイしてみる (5)そういえば、 DB の設定してなかったよ ねーということで、 OracleDB への JDBC 接続を作成。作成方法の詳細はOracle WebLogicServer 11g構築・運用ガイドを参照# ステマ
  15. 15. 1. 何も変更せずに war をデプロイしてみる (6)JDBC データソースをアプリに設定してみ る。デプロイメント→ scrumtoys→ 構成→永続 性→ scrumToysPU→ データ・ソースから JTA データソースを設定※GlassFish のデフォルトのデータソースの名前に併せて ます。
  16. 16. 1. 何も変更せずにwar をデプロイしてみる (7)エラー
  17. 17. 1. 何も変更せずに war をデプロイしてみる (8)しょうがないのでアプリケーションに手を 加える。META-INF/persistence.xmlに jta-data-source の設定を追記。※GlassFish のデフォルトのデータソースの名前に併せて ます。
  18. 18. 1. 何も変更せずに war をデプロイしてみる (9)デプロイしなおす。アクティブに ( ゚∀゚ )
  19. 19. アクセスしてみる (1)せっかく動いたので、そのままアクセスし てみる。http://localhost:7001/scrumtoys/home.jsfここで動いて、終了の予定でした・・・・
  20. 20. アクセスしてみる (2)
  21. 21. アクセスしてみる (3)org.jboss.weld.exceptions.CreationException: WELD-000079 Could not find the EJB in JNDI: class jsf2.demo.scrum.application.scrum_management.impl.ScrumManager$772 932747$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(ContextBeanI nstance.java:89) at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandl er.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.ja va:122) at jsf2.demo.scrum.web.controller.scrum.316313216$Proxy$_$ $_WeldSubclass.reset(316313216$Proxy$_$$_WeldSubclass.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)~~~
  22. 22. アクセスしてみる (4)jsf2.demo.scrum.web.controller.scrum. ProjectAction.reset(ProjectAction.jav a:122)ProjectAction.reset の呼び出しあたりが怪 しい。
  23. 23. アクセスしてみる (5)実際にソースを見るとこんな感じ。・・・・・・見慣れないアノテーションが 。これは CDI のアノテーション。
  24. 24. 余談: CDI の簡単な説明 (1)• JavaEE6 での新機能。• CDI とは Contexts and Dependency Injection の略で以前は WebBeans と呼 ばれていた。• 今まで JavaEE の範囲だと Servlet 等し か DI できなかったのを広範囲に拡張し たもの。• オブジェクトのスコープの制御もできて 便利。• JavaEE6 の ( 個人的 ) 目玉機能の一つ
  25. 25. 余談: CDI の簡単な説明 (2)使い方 ( 一例 )1. WEB-INF/beans.xml を作成。2. Injection したいクラスに @Named ア ノテーションを記述。3. Injection 先に @Inject アノテーション を記述。これだけで DI が!もう Seaser とか Spring とかいらない!
  26. 26. アクセスしてみる (6)CDI が怪しい?ということで、 SessionBean に ついている @Inject アノテーションを @EJB に 付け替えてみる。※JavaEE5 の範囲です。
  27. 27. アクセスしてみる (7)※ 注意今回 EJB 以外も色々インジ ェクションしているので、 これで動かなかったら詰み !心は折れてます。
  28. 28. アクセスしてみる (8)動きました。 ( ただしエラー )
  29. 29. アクセスしてみる (9)エラーは置いておいて
  30. 30. アクセスしてみる (10)• どうも CDI 使用して継承したクラスの親 のメソッドを呼び出すとエラーになるら しい。• 今回 EJB のインジェクションに失敗した のはたまたま。• WebLogic の修正パッチお待ちしており ます。 調べていただいた某お方ありがとうございます。
  31. 31. 余談: Ajax 対応JavaEE6(JSF2.0) では Ajax に対応しまし た。使い方はそのまま、<h:ajax>タグを使用するだけ。※ ただし、機能はそれほど多くないので、 RichFaces や PrimeFaces 等を追加で 使ったほうがいいです。※ 今回のエラーの原因は多分これ。
  32. 32. 動かしてみる (1)JavaScript のエラーが解消すれば動くはず。
  33. 33. 動かしてみる (2)しかし原因が思いつかない
  34. 34. 動かしてみる (4)どうすれば
  35. 35. 動かしてみる (4)そういえば
  36. 36. 動かしてみる (5)別件でこんなリプライをもらったことが。 ※ 念のため名前にはモザイクをかけています
  37. 37. 動かしてみる (6)weblogic.xml を入れて起動。
  38. 38. 動かしてみる (7)うごいた!
  39. 39. 移植のまとめ• JDBC 接続プールを作成するのを忘れずに 。• CDI は現状動作が怪しいのでパッチ待ち 。• weblogic.xml がないと Ajax でエラー。
  40. 40. おまけ
  41. 41. JPA について• 今回、 GlassFish から Weblogic への移 植と同時に DB を Derby から OracleDB に変更。• DML や DDL 等 SQL は一行も修正せずに 移植している。• そもそも SQL なんて使用していない。 →JPA のおかげ
  42. 42. JPA って何? (1)• 正式名称 :Java Persistence API• Hibernate 等いろいろある O/R マッピン グツールを標準仕様化したもの。• JavaEE5 では v1.0 だったのが JavaEE6 では v2.0 に。• SQL を書かなくてよくなる分、開発コス トは削減できる。
  43. 43. JPA って何? (2)• DB 移行なんて今まで現実的ではなかった けど、今回無修正でできたよ!• アプリ作成当初は MySQL で作成して、 高可用性が必要になったら OracleDB へ 乗り換えるとかも現実的な範囲で出来 る!• iBatis なんて不完全な O/R マッピング ツールはもう古い。 SQL 直書きで DAO パターンは太古の技術。
  44. 44. JPA って何? (3)• 最近流行っている Play! Framework や、 Google Apps Engine でも使用されてい る。• 今後、主流になるのは間違いないので、 まだやったことがない人も必ず触ってお いてください。※ もうすでに主流というツッコミは無しで
  45. 45. JPA って何? (4)実際のソースはこんな感じ。アノテーションで DB とのマッピングを指 定。
  46. 46. JPA って何? (5)• insert はこんな感じ。 em.persist(entity);
  47. 47. JPA って何? (6)• update はこんな感じ。 em.merge(entity);
  48. 48. JPA って何? (7)• delete はこんな感じ。 em.delete(entity);
  49. 49. JPA って何? (8)簡単でしょう?
  50. 50. JPA って何? (9)とりあえず試してみては ?
  51. 51. JPA 使用上の注意 (1)• JPA1.0 は機能が弱いので、 1.0 しか使用 できない場合は使用しないほうが良い。• その場合は、 Hibernate 等を直接使用す る方がおすすめ。• 使うならぜひ 2.0 を。 Weblogic10.3.4 から使えるよ。
  52. 52. JPA 使用上の注意 (2)• すでに設計してある DB に適用する場合相 性が非常に悪い場合がある。• 非常に沢山のテーブルが数珠のように 延々とつながっている場合はあまり使わ ないほうが良い。• そんな DB は設計が悪い。 ( ー `д ー ´) キ リッ
  53. 53. JPA 使用上の注意 (3)• 既存のものに使うなら JPA に合わせる形 である程度設計変更する気持ちで。• DDD(Domain Driven Design) とは相性 が良いので、そちらも併せて。
  54. 54. JPA 使用上の注意 (4)• 裏では SQL が流れているので、開発は SQL を見ながら!
  55. 55. まとめ• JavaEE6 便利なので使用してください。• せっかく動くものがあるので、ぜひ使用 しながら覚えてください。• 個人的には JPA だけでも使用して欲しい 。• Java SE6 はオワコン。• 以下自重。
  56. 56. まとめのおまけやっと JavaEE6 の日本語本が出ました。使用する場合はお供に!
  57. 57. ご清聴ありがとうございました。

×