Glass fishで作ったアプリをweblogicに移植してみた
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 2,414 views

#wlstudy

#wlstudy

Statistics

Views

Total Views
2,414
Views on SlideShare
1,706
Embed Views
708

Actions

Likes
0
Downloads
7
Comments
0

5 Embeds 708

http://d.hatena.ne.jp 695
http://translate.googleusercontent.com 6
https://twitter.com 4
http://s.deeeki.com 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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