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

Preview:

DESCRIPTION

#wlstudy

Citation preview

祝 祝 WebLogic 12cWebLogic 12cJavaEE6JavaEE6 対応対応

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

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

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

こんにちは。

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

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

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

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

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

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

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

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

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

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

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

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

ということで

やってみた

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

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

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

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

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

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

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

エラー

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

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

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

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

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

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

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

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

エラー

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

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

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

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

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

デプロイしなおす。

アクティブに ( ゚∀゚ )

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

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

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

アクセスしてみるアクセスしてみる (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)

~~~

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

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

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

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

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

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

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

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

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

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

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

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

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

※JavaEE5 の範囲です。

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

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

心は折れてます。

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

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

エラーは置いておいて

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

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

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

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

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

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

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

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

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

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

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

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

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

どうすれば

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

そういえば

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

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

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

weblogic.xml を入れて起動。

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

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

おまけ

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

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

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

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

→JPA のおかげ

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

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

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

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

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

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

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

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

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

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

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

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

em.persist(entity);

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

em.merge(entity);

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

em.delete(entity);

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

簡単でしょう?

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

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

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

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

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

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

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

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

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

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

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

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

SQLを見ながら!

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

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

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

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

Recommended