X

An Oracle blog about WebLogic Channel

Recent Posts

05. コラム - WebLogic勉強会 通信

「WebLogic Server勉強会」開催カレンダー(東京)

「WebLogic Server勉強会@東京」一覧表です。過去の開催内容や資料と今後の予定をまとめています。table.table-style-01{ border-collapse:collapse; width:100%;}table.table-style-01 thead th{ background-color:#444; color:#FFF; text-align:center; font-size:105%;}table.table-style-01 th,table.table-style-01 td{ border:solid 1px #666; padding:6px; font-size:105%;}table.table-style-01 td h2{ margin:0 0 6px; color:#222; font-size:100%;}table.table-style-01 td h3{ margin:0; color:#222; font-size:109%;}table.table-style-01 p{ margin:10px 0 0; color:#222;}table.table-style-01 strong{ font-weight:bold; color:#F00;}.align-C{ text-align:center;}.align-L{ text-align:left;}div#tabIndex{ width:400px; overflow:hidden; zoom:1; margin-bottom:20px;}div#tabIndex div{ width:70px; float:left; border:solid 1px #aaa; padding:10px; margin-right:15px; cursor:pointer; text-align:center; font-size:14px; background-color:#EEE;}div#tabIndex div.active{ background-color:#333; color:#fff; font-weight:bold;}WebLogic Server勉強会1995年に世に登場したWebLogic Serverは、これまで常にJava EEの世界をリードしてきました。Java EEの最新技術を学ぶ過程で、WebLogic Serverのオンラインマニュアルを読みながら評価版をダウンロードしてJava EEを勉強された方も多いのではないでしょうか。WebLogic ServerはBEAがオラクルに買収された後も着実に進化を遂げており、最新版「Oracle WebLogic Server 12c」は、企業システムの構築基盤として「最強のJavaアプリケーションサーバ」という評価を受けています。そこで、開発者の皆様からの熱いご要望を受けて「WebLogic Server勉強会」を開催する運びとなりました。カスタマーサービスのエンジニアがWebLogic Serverのホットな話題を解説したり、現場の開発者によるJava企業システム開発の体験談、チューニングやトラブルシューティングの苦労話、そしてJava EEの最新情報など、現場の生の話題が盛りだくさんです。WebLogic Server勉強会は参加者同士のネットワーキングの場でもあるので、WebLogic Server初心者の参加も大歓迎です。WebLogic Server勉強会のレポートをまとめたWebLogic Server勉強会通信も併せてご覧ください。WebLogic Server勉強会開催カレンダー東京 開催日アジェンダ2017/4/12アジェンダ1Oracle WebLogic Server クラスタOracle WebLogic Server 12.2.1におけるクラスタ機能について解説します。クラスタとは何か?WebLogicクラスタの構成方法、クラスタにデプロイされたアプリケーションの振る舞いなどクラスタの基本から応用についてご紹介します。日本オラクル株式会社 オラクルユニバーシティ岡田 大輔アジェンダ2WebLogic 管理コンソールから見るアプリケーションの動作アプリケーションの動作確認というとjps -> jstack でスレッドダンプを見ることが多いと思われますが、WebLogic 管理コンソールからでも結構見れるところは多いです。今回は WebLogic 管理コンソールからアプリケーションの状況をモニタリングしてみましょう。伊藤忠テクノソリューションズ株式会社 ITプラットフォームビジネス推進第1部橋本 和俊 氏アジェンダ3進化したRESTful管理サービスOracle WebLogic Serverでは、以前のバージョンからRESTful管理サービスが提供されていますが、最新版のWebLogic Server 12cR2で大きく進化しています。本セッションでは、他の管理ツールとの使い分けや、RESTful管理サービスの使いどころについてお話ししたいと思います。伊藤忠テクノソリューションズ株式会社 ITプラットフォームビジネス推進第1部山田 貴裕 氏2017/1/25アジェンダ1これからはじめるJava EE本セッションでは、「Java EEとは?」からはじめて、Webアプリケーションの作成からデプロイまでの一連の開発の流れを説明していきます。これからJava EEをはじめる方はもちろん、Java EE関連技術をキャッチアップをしたい方にもオススメです。日本オラクル式会社 オラクルユニバーシティ岡田 大輔アジェンダ2サポートエンジニアが語る、WebLogic ServerにおけるCDI概要・Tips紹介Context and Dependency Injection (CDI) の概要とOracle WebLogic Serverの採用している CDI実装の紹介、また、NECの製品サポートで得られたCDI使用時の事例、トラブルシュートに関するTipsを紹介します。既にWebLogic ServerでCDIを使用した開発を行っている方や、これからCDIを使用して開発を行う予定がある方、「CDIは難しそう」とCDIの使用を躊躇されている方におすすめのセッションです。NECソリューションイノベータ株式会社第四PFソフトウェア事業部大谷勇 氏2016/10/19アジェンダ1WebLogic Server 管理者のための Oracle Java Cloud Service 入門WebLogic Server 管理者の方を対象に JCS インスンタンスを構成し、アプリケーションを利用可能にするまでの流れを、JCS を実際に試してみてわかった注意点を交えてご紹介します。日本オラクル株式会社 オラクルユニバーシティ岡田 大輔アジェンダ2WebLogic Server関連の技術トピックス知られざる WebLogic Server の新機能・変更点 (12.2.1.0/12.2.1.1編)Oracle HTTP Server の利用普段、CTCのサポート部門においてOracle WebLogic Server製品の製品サポートを担当している経験から、WebLogic Server 12.2.1の新機能、Oracle HTTP Serverの活用などのTipsを取り上げ、参加者の方と共有したいと思います。WebLogic Server初心者の方はもちろん、中上級者の方にも実践で役立つノウハウや注意点など、参考になる点もあるでしょう。これからWebLogic Server12.2.1最新版を使う方、必見のセッションです。伊藤忠テクノソリューションズ株式会社 ミドルウェア技術サポート部山田 貴裕 氏橋本 和俊 氏2016/7/21アジェンダ1マルチテナント環境における WebLogic Server 管理Oracle WebLogic Server 12.2.1 で新しく導入されたマルチテナント機能を使用するためのドメイン管理のポイントをご紹介します。マルチテナント環境における JDBC や JMS 、セキュリティなどリソース設定やドメインの監視方法、デプロイされたアプリケーションへのアクセス方法などがどのように変わるのか?(変わらないのか?)を解説します。日本オラクル株式会社 オラクルユニバーシティ岡田 大輔アジェンダ2サポートエンジニアが語る。WebLogic Server のリクエスト処理フローの見える化!サポートエンジニアの観点から、WebLogic Server がリクエストを受け付け、トランザクションを処理し、データベースにコミットするまでの処理フローを見える化します。開発の現場、デバッグやトラブルシューティングなどでも役に立ついくつかの実践的な方法を組み合わせて説明します。Java EE アプリケーションの開発をしている方や、これから始めようとしている方におすすめのセッションです。サンプルソースコード(20160721-wlstudy-support-materials-part-0728a.zip)はこちら。日本オラクル株式会社 テクノロジーサポート本部東 健太郎2016/4/28アジェンダ1ココが変わった Oracle WebLogic Server 12.2.1WebLogic Server 12.2.1 で追加された新機能や変更点について説明します。管理者の方が注意したい「WebLogic Server の使いこなしのポイント」をまとめてご紹介しますので、これからWebLogic Server 12.2.1のバージョンアップを予定している方は是非ご参加ください。日本オラクル株式会社 オラクルユニバーシティ岡田 大輔アジェンダ2Oracle WebLogic Serverで学ぶDockerの基本WebLogic ServerはDocker上での動作が��ポートされています。WebLogic Server環境構築の作業を通してDockerの基本機能を説明をします。デモを交えながら、WebLogic ServerとDockerについて分かり易く解説します。WebLogic Server初心者の方、またはこれからDockerを初めてみたい方のご参加をお待ちしています。日本オラクル株式会社 Fusion Middleware事業統括本部柳原 伸弥2016/2/16アジェンダ1WebLogic Server 12cR2ではじめるJava EE 7, Docker, DevOpsWebLogic ServerがついにJava EE 7にフル対応しました!本セッションではWebLogic Server上でのJava EE 7活用について、デモを交えてご説明します。Java EE 7をより便利にするWebLogic Server機能と、WebLogic on DockerでのDevOps実践についてもご紹介します。アプリ開発者の方必見のセッションです!日本オラクル株式会社 Fusion Middleware事業統括本部早川 博アジェンダ2WebLogicマルチテナント技術詳細&デモWebLogicマルチテナントはクラウド時代に相応しい新しいアーキテクチャ やユースケースを実現します。マルチテナント環境をWebLogic Server上にどのように構成するかを説明し、マルチテナント環境を管理するための機能をデモを交えて紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部柳原 伸弥2016/1/28アジェンダ1Oracle WebLogic Server最新情報企業向けのアプリケーションサーバとして多くの実績を持つWebLogic Serverの最新版WebLogic Server12.2.1のクイックアップデートと関連イベントの案内、WebLogic ServerのPaaS (Platform as a Service)サービスの最新情報を紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部 新井 庸介アジェンダ2Oracle WebLogic Serverで学ぶJava EE 7アプリケーション開発とデプロイ最新のJava EE 7 (Java Enterprise Edition 7)の基礎から主要な仕様の概要を説明し、実際のアプリケーション開発の流れをデモを交え説明します。最新のJava EE仕様を理解したい人はもちろん、これからJava EEを学ぶ人は必見です。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔2015/10/22アジェンダ1WebLogic Server+Oracle Database連携の基礎から応用WebLogic Serverとデータベース接続の運用管理全般の基礎から応用を説明します。データソースの役割と仕組み、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2WebLogic Server+Oracle Databeseアプリケーション管理をシンプルに!Webアプリケーションの開発、テスト、運用中に「アプリケーションの見える化する手段があれば、 迅速にボトルネックや障害の原因を発見できるのに」と思ったことはありませんか? 複雑な構成において、全体のトポロジーを見たり、データソース接続状態が一目で分かります。デモを交えてOracle Enterprise Managerの実践テクニックを紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部 関屋 信彦アジェンダ3クラウドを活用したWebLogic Server+Oracle Database開発スタイルOracle Cloud PlatformのコンセプトからDatabase Cloud Service、Java Cloud Service、Developer Cloud Serviceの特長や活用シーンをデモを交えて紹介します。クラウドを活用することでWebLogic Server+Oracle Databaseの開発プロジェクトがますます効率アップ。アプリケーション開発環境が変わります。日本オラクル株式会社 Fusion Middleware事業統括本部 新井 庸介2015/7/24アジェンダ1実践的なJavaアプリケーションサーバの構築・運用 ~転ばぬ先の杖~Webシステムの中核を担うアプリケーションサーバの重要性は今後ますます高まっています。本セッションでは、Javaアプリケーションサーバのログ管理、監視・統計、チューニングの3つについて、その勘所をご紹介いたします。伊藤忠テクノソリューションズ株式会社製品・保守事業推進本部 ミドルウェア技術サポート部山田 貴裕 氏 Oracle ACE(Middleware&SOA)アジェンダ2クイズで学ぶ、WebLogic Server運用管理テクニック!前半のセッションに関する内容をクイズ形式で復習します。サーバログ、アクセスログ、GCログ、標準出力・エラー出力ログなどのログの見方や注意点など、スレッドダンプの解析や、CPU, メモリ、ネットワーク、プロセスの監視方法、性能を最適化するためのチューニングに関する知識を整理するのに有益です。(出題・解説)WebLogic Server勉強会チームアジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2015/4/23アジェンダ1Oracle WebLogic Server 12c管理のための5つのポイントOracle WebLogic Serverの初心者向けに現場で失敗しないためのポイントを解説します。Oracle WebLogic Serverドメインの作成から、アプリケーションのデプロイメントやデータ・ソース、トランザクション、セキュリティ、クラスタの構成までの基本から実践テクニックま でWebLogic Server管理のエキスパートに近づくための重点ポイントが満載です。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2Oracle WebLogic Server 12c認定試験の準備をしようOracle WebLogic Server 12c管理者認定試験の模擬問題を使って、WebLogic Serverのアプリケーションの運用管理テクニックを学びます。WebLogic Server管理試験にトライする人はもちろん、WebLogic Serverの管理者担当者のスキルアップに役立つでしょう。前半のセッションの重点ポイントを整理するためにも有用です。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2015/2/24アジェンダ1Oracle WebLogic Server JMS入門Oracle WebLogic ServerでJMSを使用する方法を紹介します。メッセージングの概念やJMSプログラミングの基本的な流れとWebLogic ServerのJMSサービスの設定方法を説明します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2WebSocketのテスト体験談WebSocket のテストを通して得た体験を参加者に共有します。主な内容はテストプログラム、実装時のパケットならびに気づいた点などです。伊藤忠テクノソリューションズ株式会社 橋本 和俊 氏アジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2014/12/18アジェンダ1Oracle WebLogic Server 12.1.3入門初心者向けのWebLogic Server入門セッションです。ソフトウェアのインストールからアプリケーションを動かすために必要なWebLogic Serverの各種設定方法を解説します。また、5月から10月まで全4回で開催された「はじめてのJava EEアプリケーション開発シリーズ」で作成したプログラムを使用してJava EEアプリケーションのデプロイメント方法をステップ・バイ・ステップで説明します。日本オラクル オラクルユニバーシティ岡田 大輔アジェンダ2「Lightning Talksセッション」知られざる WebLogic Server の新機能・変更点 (12.1.2/12.1.3編)WebLogic Server の 12.1.2 および 12.1.3 の新機能の変更点のうちあまり知られていないであろうものをいくつか取り上げて説明します。伊藤忠テクノソリューションズ株式会社 ソリューション事業推進本部 ソリューションビジネス部 山田 貴裕 氏アジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2014/10/29アジェンダ1「はじめてのJava EEアプリケーション開発: 第4回JPA入門」JPA (Java Persistence API)はJavaアプリケーションのデータベースアクセスをシンプルに、効率良く実装するためのO/Rマッピングの仕様です。JPAの特長、O/Rマッピング、EJBからの JPAの利用方法などを解説します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「はじめてのJava EE入門シリーズ総復習」5月から全4回で開催された「はじめてのJava EEアプリケーション開発」シリーズの総復習をクイズ形式で行います。Java EEの主要な仕様、JSF (JavaServer Faces), EJB (Enterprise JavaBeans)、CDI (Context Dependency Injection)、JPA (Java Persistence API) などの特長や機能て間違いやすい点について正しく理解することができます。日本オラクル Fusion Middleware事業統括本部 佐々木 政和アジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2014/8/27アジェンダ1「はじめてのJava EEアプリケーション開発: 第3回EJB&CDI入門」EJB (Enterprise JavaBeans)はサーバサイドコンポーネントのビジネスロジックを記述するための仕様です。EJBの特長、種類、トランザクションとセキュリティ制 御、依存性の注入によるコンポーネント間の連携、Beanのライフサイクル管理などを解説します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「既存JavaアプリケーションをJava EEで最新化!」独自フレームワークやStrutsのようなサードパーティ・フレームワーク を 使用した既存Javaアプリケーションを Java EEの標準仕様ベースのアプリケーションに移行するニーズが高まっています。具体的な移行アプローチや メリットについて、これまでのJava EE移行案件の体験を含めて説明します。日本オラクル テクノロジーコンサルティング統括本部 加藤田 益嗣アジェンダ3「お悩み相談室、Q&A」Oracle WebLogic Serverに関する疑問、質問に答えるセッションです。(回答者)WebLogic Server勉強会チーム2014/6/24アジェンダ1「はじめてのJava EEアプリケーション開発シリーズ: 第2回JSF入門」JSF (JavaServer Faces)は、Webアプリケーションのユーザインタフェースを開発するための仕様です。Webアプリのユーザインタフェースの要件、JSFの特長と構成、画面遷移を説明します。また、JSF画面コンポーネント、入力値が適正な範囲かどうかなどをチェックするバリデーション機能、Ajax対 応などを解説します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「OutOfMemoryError の対応方法/Heap 分析ツール(MAT)の使い方」Javaアプリケーションのトラブルシューティング(特にOOME)や性能評価の際にヒープサイズを調整したり、プログラムが使用するメモリ 量を分析することが有効です。初心者向けにメモリリークを発見するための「Eclipse Memory Analyzer(MAT)」の使い方を紹介します。伊藤忠テクノソリューションズ株式会社 ソリューションビジネス部 橋本 和俊氏アジェンダ3「お悩み相談室、Q&A」「WebLogic Serverに関する疑問、質問」に答えるセッションです。(回答者)WebLogic Server勉強会チーム2014/5/27アジェンダ1「はじめてのJava EEアプリケーション開発シリーズ: 第1回Java EE & WebLogic Server入門」Java EE 6 を使ったWebアプリケーションを作ってみたい方を対象に、Webアプリケーションの基本からプログラミングの実行までステップバイステップの解説とデモ でポイントを押さえることができる入門シリーズ(全4回)の第1回目です。 Webアプリケーション、Java, Java EEの特長、企業向けアプリケーションのフレームワークなど。環境準備としてWebLogic Serverのインスタンスの作成、ドメインの作成、サーバーの起動や停止など次回以降に使用するアプリケーションサーバ環境の準備を行います。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「WebLogic Server から Oracle Database へユーザIDを渡す方法」Oracle Database がAPユーザを識別する際、CLIENT_IDを使用することができます。WebLogic Server のデータソース便利機能 「接続時にクライアントIDを設定」の使い方を紹介します。この機能は意外と知られていないので、この機会にマスターしてください。日本オラクル テクノロジー製品事業統括本部 福田 知彦アジェンダ3「お悩み相談室、Q&A」「WebLogic Serverに関する疑問、質問」に答えるセッションです。(回答)WebLogic Server勉強会チーム2014/4/22アジェンダ1「Javaプロフェッショナルへの道」W-1選手権(WebLogic Serverクイズ王決定戦の初代チャンピオンがJava、WebLogic Serverに関する体験談やスキルアップの方法、それから将来の夢などを語ります。Java, Java EE、WebLogic Server初心者の皆様、刺激的かつ有益な情報が得られること必至。株式会社サムライズム 代表取締役 山本 裕介 氏アジェンダ2「山田貴裕 X 岡田大輔がWebLogic Serverを語る」WebLogic Server勉強会の講師陣の2名にパネルディスカッション形式でWebLogic Serverに関する体験談をお話しいただきます。 パネリスト: 伊藤忠テクノソリューションズ株式会社 ソリューション事業推進本部 ソリューションビジネス部 山田 貴裕 氏 日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 モデレータ: 日本オラクル株式会社 佐々木政和アジェンダ3「WebLogic Serverでつながろう!」参加者同士のネットワーキングを広めるための情報交換会です(ドリンク&スナックあり)。2014/3/25アジェンダ1「Oracle WebLogic Server セキュリティ」Oracle WebLogic Serverで使用されているセキュリティ・フレームワークの概要からセキュリティ・レルムの構成方法、ユーザーの変更管理、シングル・サインオンなど、 Oracle WebLogic Serverセキュリティのポイントを説明します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「Lightning Talksセッション」&「お悩み相談室、Q&A」- 「Oracle WebLogic Serverアプリケーションのモバイル・セキュリティ課題と対策」 日本オラクル株式会社 テクノロジー事業統括本部 澤井 真二- 「Oracle Directに寄せられたOracle WebLogic Serverのご質問」 日本オラクル株式会社 Oracle Direct 浅沼 隆司- 「お悩み相談室、Q&A」 (回答者)WebLogic Server勉強会チーム2014/2/26アジェンダ1Lightning Talksセッション- 「XAER_NOTA : The XID is not validエラーの対処方法」 CTC (OracleACE) 山田 貴裕 氏- 「Windows Azure上のWebLogic Server を使って遊んでみよう!」 Japan Windows Azure User Group 勇 大地 氏アジェンダ2「WebLogic Server Transaction Basics」分散トランザクションの基本概念からWebLogic Serverでのトランザクション設定やモニタ方法をご紹介します。また、トランザクション回復サービスなどの障害発生時の対応のポイントも紹介します。アジェンダ3「お悩み相談室、Q&A」2014/1/22アジェンダ1「2013���WebLogic Server勉強会の総まとめ&クイズ傾向と対策」WebLogic Server勉強会で取り上げたトピックスの中から「さすがWebLogic」機能を選んダポイントをOracle ACEの山田貴裕さんと一緒に振り返ります。後半のW-1選手権の最終チェック�����も有益でしょう。日本オラクル Fusion Middleware事業統括本部佐々木 政和 Oracle ACE: 伊藤忠テクノソリューションズ株式会社 山田 貴裕 氏アジェンダ2「第3回W-1選手権 WebLogic Serverクイズ王決定戦!」WebLogic Serverを知り尽くす「達人?」に近づくために、「難問」、「奇問」を用意いたしました。出題は、第1回の優勝者 山本裕介氏、第2回の優勝者Oracle ACE山田貴裕氏、オラクルユニバーシティの岡田さんが作成。優勝者には素敵なプレゼントがあります。ぜひ、トライしてスキルアップに役立ててください。進行:山本 裕介 氏、山田 貴裕 氏、岡田 大輔2013/12/19アジェンダ1「WebLogic Serverトラブルシューティングのポイント」トラブルシューティングで大切なことのひとつは大切な状況把握。WebLogic Serverのトラブルシューティングのために必要となる情報(サーバーログやGCログ、スレッドダンプなど)の収集方法やツールの活用方法についてご紹 介します。日本オラクル オラクルユニバーシティ 岡田 大輔 アジェンダ2「Lightning Talksセッション」&「お悩み相談室」- 「Native Memory Tracking (NMT)機能」 CTC (OracleACE) 山田 貴裕氏 - 「Oracle JDBCドライバプロパティの活用」 CTC (OracleACE) 山田 貴裕氏 - 「Flight Recorder活用の実践」GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 賢志氏2013/11/27アジェンダ1「Oracle WebLogic Serverチューニングのポイント」Oracle WebLogic Serverのチューニングの第一歩として、スレッド管理をはじめとしたOracle WebLogic Serverの設定やアプリケーションの設定について、基本的なアプローチと設定方法を紹介します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「Lightning Talksセッション」 & 「お悩み相談室」「Webサーバプラグインのタイムアウト設定」 CTC 橋本 和俊氏「高負荷試験で得た体験談」 サクラシステムサービス株式会��������� 鈺氏「やっぱり WTC!」 FacebookやっぱりWebLogic!管理人 櫻井将一郎氏2013/10/23WebLogic Serverのここが知りたい!WebLogic Server勉強会@Oracle Days Tokyo 2013 (10月23日 18:00-19:30@ウェスティンホテル東京���アジェンダWebLogic Serverアプリケーションの運用管理ノウハウ、チューニング、トラブルシューティングなどのテーマごとに現場の体験をもとに注意点や解決方法を語る Lightning Talksセッションです。 WebLogic Server勉強会初心者大歓迎です。WebLogic Serverに限らず、Javaアプリケーション開発者であれば現場で参考になること、ヒントがたくさんあるでしょう。是非、この機会にWebLogic Serverのディープな世界へ。スピーカ:WebLogic Server勉強会参加者有志2013/9/26アジェンダ1「Oracle WebLogic Serverクラスタリングの勘所」WebLogic クラスタのアーキテクチャと設定方法、クラスタ上でのHTTPセッション管理など、WebLogic クラスタを構築するポイントを紹介します。また、WebLogic Server 12.1.2の新機能であるDynamic Clusterの構成方法についても解説します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「WebLogic Server ~ Oracle Coherenceとの親和性」Oracle Coherence、インメモリデータグリッド製品の一つ����システムの可用性、拡張性を担保しながら、分散キャッシュや分散実行によりパフォーマンスの大幅な向上に寄与します。今では国内外のミッションクリティカルな領域で採用されています。本セッションでは、初めに Coherenceの 概要に触れ、WebLogic Server��の連携・���合���能を紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部 松林 晶2013/8/21アジェンダ1「Java EE アプリケーションをWebLogic Serverで動かしてみよう」Java EEアプリケーションの基本的な仕組みを説明、アプリケーションを動かすために必要なWebLogic Serverの設定、デプロイ方法をステップ・バイ・ステップで確認します。また、アプリケーション動作中のWebLogic Serverの監視方法も紹介します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「Lightning Talksセッション」WebLogic Server関連の話題をお届けするLightning Talksセッションです。「Oracle WebLogic Serverにおける証明書のインストール方法、およびSSL 設定」 CTC 橋本和俊 氏 「WebLogic Server 12.1.2を触ってみた」 日本オラクル 岡田大輔アジェンダ3「お悩み相談室」「WebLogic Server」に関するご質問にチーム全体でベストな解決案を語り合うセッションです。 (回答者)WebLogic Server勉強���チーム 2013/7/23アジェンダ1「使ってみよう WLST」WLST(WebLogic Server Scripting Tool)は、WebLogic ServerのMBeanを操作することができるコマンドライン・ツールです。本セッションでは、WLSTを使用してWebLogic Serverの設定や起動・停止などの制御やモニタリングを行う方法など運用管理に役立つWLSTの活用方法を紹介します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「Lightning Talksセッション」WebLogic Server関連の話題をお届けするLightning Talksセッションです。 「一歩先に進むためのWLST活用技法」CTC 山田貴裕氏アジェンダ3「お悩み相談室」「WebLogic Server」に関するご質問にチーム全体でベストな解決案を語り合うセッションです。 (回答者)WebLogic Server勉強会チーム2013/6/20アジェンダ1「WebLogic Serverデプロイメント・エッセンシャルズ」デプロイメントは、WebLogic Serverの運用管理において重要な作業です。本セッションでは、デプロイの基本からプロダクション再デプロイメントやFastSwapまで効率的な運用管理をサポートするデプロイメント機能を解説します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「Contexts and Dependency Injection(CDI)入門」本セッションではJava EE 6で仲間に加わったCDIを取り上げます。DI(Dependency Injection)はJava EE 5でも利用できましたが利用は限定的でした。CDIは、DIをより汎用的にしたもので、アプリケーションのコンポーネント間を疎結合にすることができます。入門者向けにCDIの基本概念から使用方法を紹介します。皆様も、Java EEアプリケーションを拡張性の高い疎結合なアーキテクチャにしましょう!日本オラクル Fusion Middleware事業統括本部 松林 晶2013/5/23アジェンダ1「今日から始めるトラブルシューティング - Flight Recorder入門」WebLogic Server上のアプリケーションのスローダウンや異常終了など想定外の不具合が発生した場���は原因の分���や対処が必要になります。本セッションでは、一般的なトラブルシューティングの概要と、Flight Recorderを活用したトラブルシューティング手法について紹介します。日��オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「Lightning Talksセッション」WebLogic Server関連の話題をお届けするLightning Talksセッションです。WebLogic Server の開発モードと本番モード」 CTC 山田 貴裕氏「Java EE7 Java Batch API」 日本オラクル 松林 晶2013/4/25アジェンダ1「Active GridLink for RAC ��門」WebLogic ServerのデータソースではOracle Real Application Clusters (RAC)の機能をフル活用できるActive GridLink for RACが提供されています。本セッションではGridLinkデータソースの仕組みと構成定義のポイントを紹介します。後半は「クイズで確認!データソース」を通じてポイントをレビューします。また、日本電気株式会社からActiveGridLinkのオラクル社との共同WhitePaperの紹介をします。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「Oracle Linuxの概要」Oracle Linux はOracle全製品の開発環境、テスト環境として利用されており、 Exadata 、Exalogic といった Engineered System に採用されている、Oracle 製品にとって最適なオペレーティングシステムです。Oracle Linux の概要と、 OS に再起動無しでカーネルのパッチを適用するKsplice テクノロジーの「ゼ ロ・ダウンタイム・カーネルパッチング」をデモを交えて紹介します。日本オラクル 製品事業統括 製品戦略統括本部 原田 元章2013/3/21アジェンダ1「Java Persistence API入門」JPAはO/RマッピングのAPIで、Java EEの標準仕様にも含まれています。アプリ ケーションのデータアクセス層開発を簡単にするだけでなく、Eclipse(OEPE 12c)やWebLogic Server 12cと組み合わせることで、より効率の良い開発を行う ことができます。JPAの基本から簡単な開発手順を解説します。日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部 松林 晶アジェンダ2「WebLogic ServerでJAX-RS」JAX-RSはRESTful Webサービスに適した柔軟なAPIです。JAX-RSはJava EE 6に含 まれる他、WebLogic Server 11gでも先取りして取り入れられています。今回は RESTful Webサービスの概要とJAX-RSの基本について、WebLogic Serverの視点か ら説明し���す���GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 ������ 氏2013/2/20アジェンダ1「WebLogic Serverとデータベース接続の基礎から応用」WebLogic Serverとデータベース接続の運用管理全般を説明します。Javaアプリ ケーションからデータベースをアクセスするための基礎技術、データソースや接 続プールの設定方法、データソースの可視やOracle RACとの接続や推奨/注 意事項について解説します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「クイズで確認!WebLogic Serverのデータソース徹底活用」データソース、接続プールの設定パラメータや運用管理に関するクイズに参加者 全員でチャレンジします。間違いやすい点の習得、各種オプションの有 効活用方法を学びます。参加者からの「経験談」も共有します。日本オラクル Fusin Middleware事業統括本部 佐々木 政和 日本オラクル オラクルユニバーシティ 岡田 大輔2013/1/24アジェンダ1「起動・停止スクリプトを極める」WebLogicの起動・停止には様々な方法があります。スクリプト��よる起動・停止は基本的な方法ですが、意外と奥が深いものです。基本的な部 分から、応用編として様々なテクニックで解決します。伊藤忠テ���ノ���リューションズ株式会社 ソフト��ェアサービス本部 ミドルウェアサービス部 山田 貴裕 氏アジェンダ2「スローダウン、ハングアップを一発解決! スレッドダンプはトラブルシューティングの味���」スローダウン、ハング状態はエンタープライズアプリケーションで開発者、運用者を良く悩ませる問題です。プロファイラなどのツールを導入せずに運 用環境でも開発環境でも一発で原因を解析できるスレッドダンプの取得方法、解析のコツを伝授します。山本 裕介 氏 侍ズムhttp://samuraism.jp/2012/12/14アジェンダ1「2012年WebLogic Server勉強会の総まとめ」2012年のWebLogic Server勉強会で取り上げたトピックスの中から「さすがWebLogic」機能を選んで総復習します。参加者からのアンケート結果や会場からの「経験 談」など、Oracle ACEの山田貴裕さんと一緒に振り返ります。進行:日本オラクル Fusion Middleware事業統括本部 佐々木政和 Oracle ACE: 伊藤忠テクノソリューションズ株式会社山��� 貴裕氏アジェンダ2「Lightning Talksセッション」WebサーバーなどでSSLオフロードするときの注意点 (山田 貴裕 氏)Java EE 6 With Scala (久保 智 氏)やっぱりWebLogic!(櫻井 将一郎 氏)2012/11/22アジェンダ1「WebLogic Serverの運用管理:応用編」前回のWebLogic Serverの運用管理の基礎編に続く応用編です。ノードマネージャによるサーバの起動・停止やプロダクション再デプロイメントなどWebLogic Serverの運用にあたって知っておきたい応用的なトピックスを解説します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「JavaServer Faces 2.0入門」JSF2.0は、Webアプリケーションのフレームワークで、Java EE 6に含まれる標準技術です。本セッションでは、初めにJSF2.0を利用するメリットをご紹介し、 JSF2.0の基礎からRIA(リッチインター ネットアプリケーション)の開発までを具体的に解説します。日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部 松林 晶2012/10/24アジェンダ1「WebLogic Serverの運用管理:基礎編」WebLogic Serverの運用管理の基礎編としてWebLogic Serverのインストールからドメイン作成、サーバの起動・停止、管理コンソールの使い方、アプリケーションのデプロイメント、JDBCデータ ソースなどの環境構築と運用管理のポイントをご紹介します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジ��ンダ2既存業務アプリケーションのiPad対応ソリューション」最近ホットなモバイルアプリケーション開発手法を取り上げます。WebLogic Server上で、Oracle JDeveloper開発ツール 、Oracle Application Development Framework (ADF)開発フレームワーク 、WebCenter Framework を使用して、既存のコンポーネントをマッシュアップして短期間に効率よくモバイルアプリケーションを開発するデモを紹介します。日本オラクル Fusion Middleware事業統括本部 ソリューション本部 安部 草平2012/9/27アジェンダ1「WebLogic Serverチューニングのポイント」WebLogic Serverを活用する際に押さえておきたいチューニングのポイントについて、スレッド管理やJDBCデータソースをはじめとしたWebLogic Serverの設定とアプリケーションの設定の二つの観点から紹介します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「クイズで確認!WebLogic Serverチューニング実践編」クイズ形式でチューニングの実践ノウハウを学ぶセッションです。はじめに実際に発生しがちなチューニング関連のクイズを出題します。参加者 (有志)か�����の経験談なども交えて正解までのプロセスを語るセッションです。(初心��の方もOK)日本オラクル株式会社 usion Middleware事業統括本部 佐々木政和日本オラクル株式会社 オラクルユニバーシテ�� 岡田 大輔「やっぱりWebLogic!」チーム有志など2012/8/30アジェンダ1「JMSを使ってみよう」JMSを使ってみよう - 岡田大輔WebLogic ServerでJMSアプリケーションを使用する方法を紹介します。メッセージングの概念や基本的なJMSプログラミングの方法からWebLogic ServerにおけるJMSサービスの設定方法までの基本的な流れを解説します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「Enterprise JavaBeans 3.1入門」Enterprise JavaBeans 3.1入門 - 松林晶Enterprise JavaBeans(以降、EJB) はEJB3.0で革命的な変化を遂げ、Java EE 6ではEJB3.1となり、さらに便利な機能が多数追加されました。本セッションでは、EJBの概要およびEJB 3.1の新機能に関して解説します。日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部 松林 晶2012/7/12アジェンダ1「WLST 入門」WLST入門 - 岡田大輔WLST (WebLogic Scripting Tool) によるWebLogic Serverの管理方法をご紹介します。 WLSTを使用したWebLogic Serverの操作方法���コンフィグレーション・モニタ方法、WLSTによるコンフィグレーションの際に必要とされるMBeanの概��に��いて解説します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2「Javaアプリ開発現場からの報告」Javaアプリ開発現場からの報告 - 蓮沼賢志Javaアプリ開発の効率アップのためには、Java SE 7, Java EE 6といった最新技術を活用することが有効です。今回、IDE開発環境(Eclipse 4.2, OracleEnterprisePack for Eclipse)の使用感、最新のJDK 7でWebLogic Serverを動かして何が変わるか、Java EE 6のアプリケーション開発プロジェクトのアプローチなど、私が経験したJava最新技術を紹介します。GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 賢志 氏2012/6/28アジェンダ1「続・はじめての WebLogic Serverクラスタリング」続・はじめての WebLogic Serverクラスタリング - 岡田大輔前回の続編です。クラスタに対する負荷分散の設定(HTTP, RMI, JMS ...)やサービス/サーバの移行などWebLogic Serverクラスタが提供する高可用性を実現する機能についてご紹介します。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔アジェンダ2Lightning Talksセッション」WebLogic ServerとJavaに関する最新の実践情報、経験談などを語ってもらいます。1.boot.propertiesから見るWebLogic Serverの世界 - 山田 貴裕伊藤忠テクノソリューションズ株式会社 ソフトウェアサービス本部 ミドルウェアサービス部 山田 貴裕 氏2.WebLogic Server運用管理 - 管理対象サーバ起動方法の選定 - 道脇 翔平やっぱりWebLogic! グループ 道脇 翔平 氏2012/5/23アジェンダ1「はじめてのWebLogic Serverクラスタリング」はじめてのWebLogic Serverクラスタリング - 岡田大輔WebLogic クラスタのアーキテクチャと設定方法、クラスタ上でのHTTPセッション管理など、WebLogic Serverでクラスタを構築するポイントをご紹介します。日本オラクル株式会社 ���ラ�����ルユニバーシティ 岡田 大輔アジェンダ2「Java EE 6 かんたんO/Rマッピング JPA2.0入門」Java EE 6 かんたんO/Rマッピ���グ JPA2.0入門 - ��林 晶Java EE 6のO/Rマッピング仕様であるJPAの基礎、Oracle WebLogic Server 12cやOEPE 12cと連携したJPA開発をデモを交��て解説します。���本オラクル株式会社 Fusion Middleware事業統括本部 ソリュー��ョ��本部 松林 晶2012/4/12アジェンダ1「Oracle WebLogic Serverの管理入門」Oracle WebLogic Serverの管理入門 - 岡田大輔WebLogic Server入門セッションです。WebLogic Serverドメイン定義、管理サーバと管理対象サーバ、管理モードと運用モード、管理コンソールの使い方、デプロイメント、クラスタ、JDBCデータソースの設定など運用管理者向けのポイントをご紹介します。日本オラクル オラクルユニバーシティ 岡田 大輔アジェンダ2「JavaOne Tokyo 2012報告」4月4-5日に開催されたJavaOne Tokyo 2012の参加報告セッションです。JavaOneで発表された最新情報、実践技術やロードマップ、それにスピーカとの雑談内容など参加者の視点で気づいた点をご紹介します。合同会社Starlight&Storm代表 長谷川裕一氏2012/3/29アジェンダ1「WebLogic ServerトランザクションのキホンWebLogic Serverトランザクションのキホン - 岡田大輔分散トランザクションの基本概念、WebLogic Serverのトランザクション設定や���ニ���方法と トランザクション回復 サービスなどの障害発生時の対応のポイントを紹介します日本オラクル オラクルユニバーシティ 岡田大輔アジェンダ2「JRockit Flight Recorderを活用しよう!」障害解析の事例からJRockit Flight Recorderを使った解析手順を解説します。日本オラクル日本オラクルFusion Middleware事業統括本部 ビジネス推進本部 佐々木政和 若林夏樹アジェンダ3「Lightning Talksセッション」WebLogic Serverのネットワーキング活動紹介 「やっぱりWebLogic! 」 FaceBookグループのご案内2012/2/22アジェンダ1「WebLogic Serverのセキュリティを極める」WebLogic Serverのセキュリティを極める - 岡田大輔セキュリティ概論からWebLogic Serverで提供されるフレームワークの説明、セキュリティ情報のユーザの変更管理・運用監視、データアクセス、シングルサインオンなど���具体���に説���します。日本オラクル オラクルユニバーシティ 岡田大輔アジェンダ2「GlassFishアプリをWebLogic Server 12cに移行する」GlassFishからWebLogic Server 12cに移行した経験を元に注意点を語ります。久保 智 氏2012/1/31アジ��ンダ1「最新Oracle WebLogic Server 12c技術トピック」最新Oracle WebLogic Server 12c技術トピック - 二川秀智日本オラクル Fusion Middleware事業統括本部 ソリューション本部 二川 秀智アジェンダ2「トラブルに強いWebLogic Serverの設計方法」トラブルに強いWebLogic Serverの設計と構築 - 山田貴裕氏伊藤忠テクノソリューションズ株式会社 ソフトウェアサービス本部 ミドルウェアサービス部 山田貴裕氏2011/12/7アジェンダ1第2回W-1選手権 WebLogic Serverクイズ王決定戦!WebLogic Serverを知り尽くす「達人?」に近づくために、「難問」、「奇問」、を用意いたしました。ぜひ、トライし��スキルアッ���に役立ててください。��本オラ��ル進行: 若林夏樹 解説: 岡田大輔、佐々木政和アジェンダ2「2011年WebLogic Server勉強会大忘年会」 Lightning Talks���ッション & ネットワーキングWebLogic Serverを極める - 岡田大輔WebサーバでBASIC認証��行う��きの注意点 伊藤忠テクノソリューションズ株式会社 山田貴裕 氏2012年のWebLogic Server勉強会はこうなる - 佐々木政和2011/10/26アジェンダ1「WebLogic Server 11gの基本動作をデモで確認!(前半)」日本オラクル 佐々木政和、若林夏樹、岡田大輔Oracle WebLogic Server 11g (10.3.x)の概要, インストール,, 構成, ドメインの作成, 管理サーバの起動管理対象サーバの作成/起動 JDBCデータソースの作成/設定アジェンダ2「WebLogic Server 11gの基本動作をデモで確認!(後半)」日本オラクル 佐々木政和、若林夏樹、岡田大輔アプリケーションのデプロイ/動作確認 WebLogic Scripting Tool (WLST) による管理 監視ダッシュボードによるモニタリング JRockit Flight Recorder によるアプリケーション挙動の確認 Q&A、Quiz2011/9/20アジェンダ1「基礎から学ぶWebLogic Server 11g 入門編(前半)日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和そもそもWebLogic Serverとは何だ? WebLogic Serverは他のAPサーバと何が違うんだ? WebLogic Server��は、どんなライセンスがあるの?アジェンダ2「基礎から学ぶWebLogic Server 11g 入門編(後半)」日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和WebLogic Serverのインストールや構成はどうすればいいの?2011/7/28アジェンダ1「Java 7 + 8の概要」日本オラクル 寺田佳央2006年Java SE 6が登場して5年が経過しました。7月28日に待望の Javaの新バージョンJava SE 7 がリリースされます。 本セッションではJava SE 7で提供される新機能や言語仕様の変更点等を紹介すると共に、Java SE 8 で含まれる新機能についても概要を紹介します。アジェンダ2「エンタープライズアプリケーションとTwitterの連携」Twitter4J.org 山本裕介氏エンタープライズにおける Twitter 連携の可能性についての説明、また WebLogic Server 上で Twitter と連携するアプリケーションのデモを行います。WebLogic Server 上で Twitter と連携するエンタープライズアプリケーションがいかに簡単に作れるかということをイメージしてもらえるのではないかと思います。2011/6/23アジェンダ1「Oracle JRockit JVMのアーキテクチャとチューニングポイント」日本オラクル 佐々木政和Oracle JRockit JVM の概要から、GCメカニズム、チューニングのTIPSを紹介します。メモリ管理、ロック、レイテンシ低下防止、スループット向上、性能安定、起動高速化、メモリ占有領域を小さくするためチューニングのノウハウについてサポートエンジニアを交え、JVMに関するホットトピックスを含む最新情報をお伝えします。アジェンダ2「アーキテクトへの道」合同会社Starlight&Storm代表 長谷川裕一氏企業向けのシステム構築を成功するためには、優れたアーキテクチャを設計し実装することが重要です。アーキテクトの仕事は決して順風満帆ではありません。アーキテクトが目指すべき道についてこれまでの「経験」を交えて参加者の皆様と共有したいと思います。2011/2/16アジェンダ1「WebLogic Server総復習」日本オラクル 佐々木政和これまでのWebLogic Server勉強会の中からWebLogic Serverの開発コンセプト、歴史、エンタープライズシステムの要件、スレッド管理、JRockitのスレッドダンプ分析、運用管理の現場を変えるツールの紹介など。アジェンダ2「W-1グランプリ:WebLogic Serverクイズ王決定戦」佐々木政和、(テクニカルアドバイザー)丹羽 明参加者の中で「誰が一番WebLogic Serverキングか?」第1回目のW-1グランプリ(WebLogic Server王決定戦)です。参加者の日ごろの鍛錬を確認するた��にWebLogic Serverに��する12問の難問・奇問を用意しました。さて、初代キングはどなたに?2010/12/15アジェンダ1「WebLogic Serverを極める(第2回)」日本オラク�� ミド��ウェアサポート本部 丹羽 明KROWNに登録されたサポート診断サービスを��考にしながらク��スタ、ロード���ランス、メ���リ不足とメモリリークに関する問題調査��法、メ��リ関連(Out Of Memory)の障害の発生原因と解決方法の診断プロセスを解説します。アジェンダ2「Oracle WebLogic Server on JRockit Virtual Edition技術検証報告」CTC伊藤忠テクノソリューションズ(株) 井澤 信悦 氏初期設定と動作環境および条件、NFS, SSHの設定とドメインの作成、Oracle VM Server上へのデプロイとサーバの起動・停止などの操作、Webアプリケーションのデプロイ、性能測定結果と考察、物理環境から仮想環境への移行方法などを解説します。2010/11/16アジェンダ1「WebLogic Serverを極める(第1回)」日本オラクル ミドルウェアサポート本部 丹羽 明KROWNに登録されたサポート診断サービスを参考にしながらコアサーバの異常時、サーバハング、メモリ関連の問題の発生原因と解決方法の診断プロセスを解説します。アジェンダ2「アーキテクチャを語ろう!」合同会社Starlight&Storm代表 長谷川裕一氏��間違い��らけのソフトウェア・アーキテクチャ」の「ソフトウェアアーキテクチャと品質特性シナリオ」を参考にして、参加者と一緒に開発現場の体験談や失敗談などを語り合います。2010/10/21アジェンダ1「Oracle WebLogic Server 11gを学ぼう」日本オラクル オラクルユニバーシティ ��木 洋介オラクルユニバーシティの講師がWebLogic Server研修コースの一部をご紹介します。今回は、初心者向けに「クラスタ管理の概要」をテーマに選びました。WebLogic Serverの認定資格のご紹介も行います。アジェンダ2「Java EE 6 最新機能のご紹介」日本オラクル Application Gridソリューション部 二條 智文Java Platform, Enterprise Edition (Java EE) 6はエンタープライズ Javaコンピューティングの分野における最新の標準仕様です。本セッションでは、Java EE 6で提供される機能をデモを交えてご紹介します。2010/8/18アジェンダ1「WebLogic Server クラスローダインターナル」日本オラクル 鈴村 圭史アジェンダ2「WebLogic Serverのサポートの事例から」日本オラクル 軒原 翼アジェンダ3「WebLogic Server開発者が語る、分散トランザクション & WebLogic Server開発の裏側」日本オラクル 加藤 比呂武2010/5/20アジェンダ1「WebLogic Serverのアーキテクチャを見える化する」日本オラクル 永井 英一、軒原 翼アジェンダ2「全ての挙動は記録される。高信頼性JVMの���在」日本オラクル 二川 秀智2010/4/23アジェンダ1「WebLogic Server 最低限の運用管理術」日本オラクル 軒原 翼アジェンダ2「システム開発入門シリーズ第3回: 実装とテストのポイント」合同会社Starlight&Storm代表 長谷川 裕一氏アジェンダ3「Lightning Talks」セッション1. 管理対象サーバのPIDを瞬時に特定する ベイカレント・コンサルティング 小松 丈紘氏 2. メモリ不足でバグを疑う前に 日本HP 小林 栄司氏 3. リーク、メモリリーク されどリークとの奮闘 Mformation Technologies Inc. 伊藤 康宏氏 4. うわさのWebLogic関連の新製品情報 日本オラクル 新井 庸介2010/2/25アジェンダ1「WebLogic Server デプロイメント インターナル」日本オラクル 軒原 翼アジェン���2「システム開発入門シリーズ第2回:��析と��計のポイン��」合同会社Starlight&Storm代表 長谷川 裕一氏アジェンダ3「Lightning Talksセッション1. 「腕試しにいかが?WebLogic Server認定試験のご紹介」 日本オラクル 渋��� 俊昭2. WebLogic Serverのアラート「Oracle Security Alert for CVE-2010-0073」 日本オ��クル 軒原 翼2010/1/22アジェン��1「WebLogic Serverのセキュリティ、初歩から実践まで」日本オラクル 澤井真二アジェンダ2「システム開発入門シリーズ:第1回 開発プロセスと要件定義のポイント」合同会社Starlight&Storm代表 長谷川 裕一氏2009/11/27アジェンダ1「WebLogic Server開発系、運用系パネルディスカッション」日本Springユーザ会 会長 長谷川 裕一氏住商情報システム株式会社 刀根 誠治氏 日本オラクル 軒原 翼、冨沢 篤史、(モデレータ)佐々木政和2009/10/29アジェンダ1「JRockit JVMのGCアルゴリズム概要とチューニングポイント」日本オラクル 軒原 翼アジェンダ2「Oracle WebLogic Serverのチューニングのキホン」日本オラクル 岡田 大輔アジェンダ3「経験者が語る、Spring Frameworkを使ったリファクタリングの実践」日本Springユーザ会 土岐 孝平氏2009/8/20アジェンダ1「開発者の注目ポイントはココ!Oracle WebLogic Suite 11gの最新情報」日本オラクル 佐々木 政和アジェンダ2「WebLogic Serverの管理系 Tips」住商情報システム株式会社 刀根 誠治氏 「WebLogic ServerとPitchforkで快適なアプリケーション開発」 日本Springユーザ会 長谷川 裕一氏アジェンダ3「WebLogic Serverハング時のスレッドダンプの重要性とその取得方法」日本オラクル 軒原 翼2009/5/21アジェンダ1「WebLogic ServerのTIPS」日本オラクル 石塚 崇浩アジェンダ2「現場で学んだJava EEアプリケーション成功の秘訣」スピードラボ 久松 浩史氏「Javaアプリケーションのオフショア開発の心得」MBPジャパン 高橋勝弥氏 「SpringFrameworkの最新情報」 日本Springユーザ会 長谷川 裕一氏2009/4/14アジェンダ1「日本オラクルのサポートエンジニアが語るWebLogic Server」「WebLogic Scripting Tool (WLST) の活用」 永井 英一 「JRockit Ctrl-Break ハンドラの活用」 横澤 潤 「WebLogic Serverアーキテク��ャ解説��WorkManager, スレッドモデル」 大類 和久アジェンダ2「WebLogic + SpringFrameworkの最新事例」日本Springユーザ会 長谷川 裕一氏アジェンダ3「Oracle Open World & Oracle Developの見所紹介」日本オラクル伊東 裕輝

「WebLogic Server勉強会@東京」一覧表です。過去の開催内容や資料と今後の予定をまとめています。 WebLogic Server勉強会 1995年に世に登場したWebLogic Serverは、これまで常にJava EEの世界をリードしてきました。Java EEの最新技術を学ぶ過程で、WebLogic...

05. コラム - WebLogic勉強会 通信

「WebLogic Server勉強会」開催カレンダー(大阪)

「WebLogic Server勉強会@大阪」一覧表です。過去の大阪での開催内容や資料と今後の予定をまとめています。「WebLogic Server勉強会@東京」一覧表」と併せてご覧ください。table.table-style-01{ border-collapse:collapse; width:100%;}table.table-style-01 thead th{ background-color:#444; color:#FFF; text-align:center; font-size:105%;}table.table-style-01 th,table.table-style-01 td{ border:solid 1px #666; padding:6px; font-size:105%;}table.table-style-01 td h2{ margin:0 0 6px; color:#222; font-size:100%;}table.table-style-01 td h3{ margin:0; color:#222; font-size:109%;}table.table-style-01 p{ margin:10px 0 0; color:#222;}table.table-style-01 strong{ font-weight:bold; color:#F00;}.align-C{ text-align:center;}.align-L{ text-align:left;}div#tabIndex{ width:400px; overflow:hidden; zoom:1; margin-bottom:20px;}div#tabIndex div{ width:70px; float:left; border:solid 1px #aaa; padding:10px; margin-right:15px; cursor:pointer; text-align:center; font-size:14px; background-color:#EEE;}div#tabIndex div.active{ background-color:#333; color:#fff; font-weight:bold;}WebLogic Server勉強会開催カレンダー大阪 開催日アジェンダ2017/5/31参加申し込み受付中アジェンダ1「IaaSでWebLogic Server環境を構築しよう!」Oracle Public Cloudを使用してWebLogic Server環境を構築するアプローチには、これまでWebLogic Server勉強会でもたびたび取り上げたJava Cloud Serviceの様なPaaS活用、に加えて、今回説明するOracle IaaSのCompute Cloud上に構築する方法があります。Oracle IaaSのCompute Cloudの概要を説明した後に、その上でWebLogic Server構築の手順と注意点などを解説します。 日本オラクル オラクルユニバーシティ 野邊 哲男アジェンダ2「Oracle Cloudで利用するコンテナ環境」最近はDockerを用いたコンテナ環境上でのアプリケーション開発に注目が集まっています。Oracle Cloud でもコンテナ環境を提供するクラウドサービスの提供が行われています。今回はOracle Cloud が提供しているコンテナ環境の概要説明と実践方法についてご紹介します。 日本オラクル Fusion Middleware事業本部柳原 伸弥2017/2/22アジェンダ1「WebLogic Server 12c R2でJava EE 7 jBatchアプリケーションを動かしてみよう!」Java EEでバッチ処理というと違和感を感じる人もいるかもしれませんがJava EE7では、Batch Applications for the Java Platform(通称 jBatch)が仕様の中に含まれるようになり、Java EE 7に準拠しているWebLogic Server 12cR2でも、必然的にjBatchアプリケーションによるバッチ処理がサポートされるようになりました。本セッションでは、Java EEの基本を復習した後で、jBatchアプリケーションをWebLogic Server12cR2上で動作させる上で認識しておくべき留意点などについて、デモを交えながら説明します。 日本オラクル オラクルユニバーシティ 野邊 哲男アジェンダ2「クイズで学ぼう!Java EEの基本とjBatchアプリケーション開発のポイント」前半のセッションの復習を兼ねて、Java EEの基本とWebLogic Server 12cR2でjBatchアプリケーションを実行・管理していく上での留意点をクイズ形式で学びます。誤解や間違いやすい点を再確認できますので、お気軽にチャレンジして見てください。 日本オラクル Fusion Middleware事業本部 佐々木 政和2016/11/16アジェンダ1「クラウドで利用するWebLogic Server(Cloud Stack Manager, AppToCloud)」WebLogic ServerをPaaSとして提供しているJava Cloud Serviceを利用するために便利な機能を紹介しま�����。クラウド・ファーストで環境を構築(Paas Service ManagerやCloud Stack Manager)、オンプレミスからクラウドへの移行 (AppToCloud)その他、クラウド環境でWebLogic Serverを利用する際に有益なTipsについて紹介します。日本オラクル クラウド・テクノロジー事業統括 Fusion Middleware事業本部 柳原 伸弥アジェンダ2「クイズで学ぼう!WebLogic Server 12c R2 とJava Cloud Serviceのキホン」このセッションでは、Java Cloud Serviceと、WebLogic Server 12c R2の基本についてクイズ形式で解説いたします。また、ORACLE MASTER Cloud - Oracle Java Cloud Service認定資格試験についても紹介します。選択式の難問?にチャレンジすることで間違いやすいポイントなどの整理になります。試験対策に有益な情報も飛び出すかも? 日本オラクル オラクルユニバーシティ 野邊 哲男Fusion Middleware事業本部 佐々木 政和2016/8/3アジェンダ1「Oracle WebLogic Server 12cR2最新情報」Oracle WebLogi Server 12cR2が2015年10月にリリースされました。Java EE 7完全準拠、Dockerサポートなどの開発生産性が向上され、新しいタイプのデータソースが追加されたり、パラレルデプロイやマルチテナント(後半セッションで詳細説明)、継続的可用性などの運用管理の機能が追加されました。これらの新機能を説明します。またOracleが提供しているPaaS(Java Cloud Service)の最新情報も紹介します。日本オラクル クラウド・テクノロジー事業統括 Fusion Middleware事業本部 佐々木 政和アジェンダ2「実践!Oracle WebLogic Server - マルチテナント」Oracle WebLogic Server 12cR2から提供されたマルチテナントは、ドメインやインスタンス数を抑制する集約性、テナント間でシステムリソースの独立を担保する分離性、それから環境間の移行を容易にする可搬性に優れた新機能です。実際のプロジェクト現場での使いどころなどを踏まえてデモを交えながら説明します。 日本オラクル クラウド・テクノロジー事業統括 Fusion Middleware事業本部 柳原 伸弥2016/2/17アジェンダ1「WebLogic Server 12cR2で学ぶ、Java EE 7, マルチテナント, DevOpsの基礎から応用」WebLogic Server 12cR2を使用しながらJava EE 7の最新情報を解説��ます。また、マルチテナント、WebLogic on DockerでのDevOps実践ノウハウについてもデモを交えて紹介します。アプリ開発者の方必見のセッションです!日本オラクル Fusion Middleware事業統括本部 ソリューション本部 関屋 信彦アジェンダ2「WebLogic Serverとデータベース接続の基礎から応用」WebLogic Serverとデータベース接続の運用管理全般を説明します。Javaアプリケーションからデータベースをアクセスするための基礎技術、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2015/11/25アジェンダ1「基礎から学ぶWebLogic Server」初心者向けのWebLogic Server入門セッションです。ソフトウェアのインストールからアプリケーションを動かすために必要なWebLogic Serverの各種設定方法を解説します。 日本オラクル Fusion Middleware事業統括本部 ビジ���ス推進本部 佐々木 政和アジェンダ2「WebLogic Serverで実装されたOracle Java Cloud ServiceとOracle Developer Cloud Serviceの概要」Java Cloud ServiceはWebLogic Serverを使用したPaaSソリューションです。Java Cloud Serviceの概要と無償トライアル手順を紹介します。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2015/8/5アジェンダ1「WebLogic Serverとデータベース接続の基礎から応用」WebLogic Serverとデータベース接続の運用管理全般を説明します。Javaアプリケーションからデータベースをアク�������るための基礎技術、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「クイズで確認! WebLogic Serverのデータソース」WebLogic Serverとデータベース連携に関連するクイズを出題します。前半セッションの復習を兼ね�������、過去の勉強会で出た質問など誤解、間違いやすい点などを取り上げます。WebLogic Serverの環境設定やチューニング、トラブルシューティングなどに役立つでしょう。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2015/5/13アジェンダ1「Java EEアプリケーションを WebLogic Serverで動かして見よう」Webアプリケーションを開発する方、Java EE、WebLogic Serverの概要を学びたい方対象。サンプルアプリケーション���使って企業向けWebアプリケーション開発の流れやJava EEの特長、主な仕様(JSF, EJB, CDI, JPA)の概要とサンプルアプリケーションの構成を説明。また、インストール、環境構築と各種設定方法、アプリケーションのデプロイ、運用監視方法のデモ、および最新情報など。 日本オラクル株式会社 Fusion Middleware 事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「Java EE & WebLogic Serverのポイントを確認!」クイズ形式で、前半のセッション内容を振り返ります。Java EE、WebLogic Serverの基本ポイントの整理と若干の応用問題を出題します。 日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2015/2/4アジェンダ1「WebLogic Serverチューニングのポイント」WebLogic Server のチューニングの第一歩として、スレッド管理をはじめとしたWebLogic Serverの設定(自動チューニングスレッドプール、ワークマネージャ、過負荷保護機能)とアプリケーションの設定(Webアプリケーション、データソース)について、基本的なアプローチと設定方法を紹介します。また、Java Flight Recorder を活用したWebLogic Serverの診断についてデモを交えて説明します。 日本オラクル株式会社 Fusion Middleware 事業統括本部 ソリューション本部 野邊 哲男アジェンダ2「クイズで確認! WebLogic Serverのチューニング、正しいのはどれだ?」WebLogic Serverのチューニングに関連するクイズを出題します。前半セッションの復習を兼ねて、過去の勉強会で出た質問など誤解、間違いやすい点などを取り上げます。WebLogic Serverの環境設定やチューニング、トラブルシューティングなどに役立つでしょう。 日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2014/11/12アジェンダ1「WebLogic Serverとデータベース接続の基礎から応用」WebLogic Serverとデータベース接続の運用管理全般を説明します。Javaアプリ ケーションからデータベースをアクセスするための基礎技術、データソースや接 続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「クイズで確認! WebLogic Serverのデータソース」WebLogic Serverとデータベース連携に関連するクイズを出題します。前半セッションの復習を兼ねて、過去の勉強会で出た質問など誤解、間違いやすい点などを取り上げます。WebLogic Serverの環境設定やチューニング、トラブルシューテシングなど���役立つでしょう。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2014/8/6アジェンダ1「基礎から学ぶOracle WebLogic Server 12c入門」Webアプリケーション、Java, Java EEの特長、企業向けアプリケーションのフレームワーク、WebLogic Serverのインストール、ドメイン定義、管理サーバと管理対象サーバ、管理モードと運用モード、サーバの起動や停止、管理コンソール、アプリケーショ ンのデプロイメント、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について説明します。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「クイズで確認!WebLogic Serverのツボ」WebLogic Server関連のク���ズを出題します。過去の勉強会で出た質問など誤解、間違いやすい点などをクイズ形式で取り上げます。WebLogic Serverの環境設定やチューニングなどに役立つでしょう。 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2014/5/14アジェンダ1「WebLogic Serverの監視の仕組みとログ管理」WebLogic Serverの監視において重要となるJMX MBeanの仕組みやログの管理手法について説明いたします。 日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ2「各種ツールによるWebLogic Serverの監視」WebLogic Serverの監視ツールやその使い方についてデモを交えながら説明いたします。 日本オラクル株式会社 Fusion Middleware事業統括本部 ソリューション本部 野邊 哲���アジェンダ3「Quiz, Q&A」 2014/2/12アジェンダ1「WebLogic ServerのJDBCデータソースの基礎」WebLogic Serverのデータベース接続サービスであるJDBCデータソースや接続プールの基本について説明いたします。日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ2「WebLogic ServerのJDBCデータソースの監視方法と設定上の注意点」(資料はアジェンダ1と共通)ツールを用いてWebLogic ServerのJDBCデータソースの動作状況を監視する方法について、デモを交えて説明いたします。また、WebLogic ServerのJDBCデータソースの設定上の注意点について説明します。日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ3「Quiz, Q&A」2013/11/13アジェンダ1「WebLogic Serverの環境構築の基礎」WebLogic Serverのドメイン管理の基礎やドメインの構成要素について説明いたします。日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ2「WebLogic Serverのドメイン構成例」 (資料はアジェンダ1と共通)要件や状況に応じたWebLogic Serverのドメイン構成の例について紹介いたします。また、実際にWebLogic Serverのインストールやドメイン構成を行うデモンストレーションをご覧頂きます。日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ3「Quiz, Q&A」2013/8/7アジェンダ1「WebLogic Serverの基本を学ぶ」WebLogic Serverのインストールからアプリケーションの起動まで一連の流れを初心者向けに説明します���WebLogic ServerとJava EE���関係、運用管理者と開発者の役割、ドメイン作成、管理サーバ・管理対象サーバの作成、サーバの起動・停止、管理コンソールの使い方、アプリケーショ ンのデプロイメント、JDBCデータソースの設定などデモを交えて解説します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「WebLogic Server活用術」これまでWebLogic Server勉強会で取り上げてきた技術テーマから注目機能のポイントを説明します。チューニング、トラブルシューティング、WLST、デプロイ、クラス タリング、データソース、Flight Recorder、JMS、CDI、JSF、JAX-RS、EJBなど、各機能や仕様内容、活用方法、注意点を解説します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2013/5/15アジェ����1「これから始めるWebLogic Server」これからWebLogic Serverを触ってみようという初心者を対象にしたセッションです。WebLogic ServerとJava EEの関係、運用管理者と開発者の役割、インストールからドメイン作成、管理サーバ・管理対象サーバの作成、サーバの起動・停止、管理コンソールの使い方、デプロイメント、JDBCデータソースなどデモを交えて説明し��す��日本オラクルFusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「WebLogic Serverの技術トピックス」WebLogic Serverの運用管理の機能からクラスタリング、JMS、WLST、トランザクション、Flight Recorderなどを取り上げ、各機能の役割、活用方法、注意点などを解説します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2013/2/13アジェンダ1「WebLogic Serverの運用管理: 基礎編」WebLogic Serverの運用管理の基礎編としてWebLogic Serverのインストールからドメイン作成、サーバの起動・停止、管理コンソールの使い方、アプリケーショ ンのデプロイメント、JDBCデータソースなどの環境構築と運用管理のポイントをご紹介します。日本オラクル オラクルユニバーシティ 岡田大輔アジェンダ2「クイズで確認!WebLogic Serverの運用管理」WebLogic Serverの運用管理に関するクイズを出題します。クイズ形式にすることにより間違いやすい点や細かいオプションの動作、それから効率アップにつながる Tipsなどの習得に役立ちます。日本オラクル オラクルユニバーシティ 岡田大輔 日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2012/11/14アジェンダ1「WebLogic Serverチューニングのポイント」WebLogic Serverの運用を行う際に押さえておきたいチューニングのポイントについて、スレッド管理やJDBCデータソースをはじめとしたWebLogic Serverの設定とアプリケーションの設定の二つの観点から紹介します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2モバイルアプリケーション開発手法最近ホ��トなiPadなどのモバイルデバイス向けのアプリケーション開発手法を取り上げます。WebLogic Server上で、Oracle JDeveloper開発ツール 、Oracle Application Development Framework (ADF)開発フレームワーク 、WebCenter Framework を使用して、既存の�����ンポーネントをマッシュアップして短期間に効率よくモバイルアプリケーションを開発するデモを紹介します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 若林 夏樹2012/8/8アジェンダ1「Oracle WebLogic Serverの管理入門」WebLogic Server入門セッションです。各機能のポイントのみを初心者向けにピックアップして説明します。WebLogic Serverドメイン定義、管理サーバと管理対象サーバ、管理モードと運用モード、管理コンソールの使い方、デプロイメント、クラスタ、JDBCデータ ソース設定などの運用管理のポイントを解説します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和アジェンダ2「Oracle WebLogic Serverトランザクションの基本」分散トランザクションの基本概念とWebLogic Serverにおけるトランザクション処理を説明します。Weblogic Serverのトランザクションの設定やモニタ方法とトランザクション回復 サービスなどの障害発生時の対応のポイントを解説します。日本オラクル Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和2012/5/9アジェンダ1「デモで確認!WebLogic Server 12cの基本動作」WebLogic Serverの概要をクイックレビューした後に、実際にインストールや構成定義の方法など、初心者がまず知っておくべき基礎をしっかりデモを交えて解説します。日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和、 若林 夏樹アジェンダ2「JRockit Flight Recorderを活用しよう!」JRockit Flight Recorderは予兆のない突然の障害でも自動的に記録された直前の内部状況を保存できるので、GUIツールを用いた直感的な詳細分析が可能です。デモ を交えて解説します。日本オラクル株式会社 Fusion Middleware事業統括本部 ビジネス推進本部 佐々木 政和、 若林 夏樹2012/2/8アジェンダ1「Java EE 6の基本」Java EEとは、 Java EE 6新機能(Web Profile, Dependency Injection, EoD, 永続化など)日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男アジェンダ2「Oracle WebLogic Server 12cの新機能」開発生産性の向上(Maven / CAT / zip distribution(Enhance), Latest Spring, Oracle Enterprise Pack for Eclipse / NetBeans, Glassfish DD support)、運用管理に関する新機能を解説日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男2011/11/9アジェンダ1「基礎から学ぶWebLogic Server 11g データベース接続編(前半)」日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男Javaからのデータベース・アクセス基礎 Java Web アプリケーションからのデータベース・アクセス基礎 WebLogic Server 11gのデータソースアジェンダ2「基礎から学ぶWebLogic Server 11g データベース接続編(後半)」日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男WebLogic Server 11gのデータソースの監視 WebLogic Server 11gのデータソースにおける推奨/注意事項2011/8/3アジェンダ1「基礎から学ぶWebLogic Server 11g 入門編(前半)」日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男そもそもWebLogic Serverとは何だ? WebLogic Serverは他のAPサーバと何が違うんだ? WebLogic Serverには、どんなライセンスがあるの?アジェンダ2「基礎から学ぶWebLogic Server 11g 入門編(後半)」日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男WebLogic Serverのインストールや構成はどうすればいいの?2011/5/11アジェンダ1「Oracle JRockit JVMのアーキテクチャとチューニングポイント」日本���ラクル株式会社 Fusion Middleware事業統括本部  ビジネス推進本部 佐々木 政和Oracle JRockit JVM の概要から、GCメカニズム、チューニングのTIPSを紹介しま��。メモリ管理、ロック、レイテンシ低下防止、スループット向上、性能安定、起動高速化、メモリ占有領域を小さくするためのチューニングのノウハウについて最新情報をお伝えします。アジェンダ2「WebLogic Server11g(10.3.4)のActiveCacheについて」日本オラクル株式会社_x000B_Fusion Middleware事業統括本部  ソリューション本部 野邊 哲男WebLogic Server 11g(10.3.4)では、Oracle Coherenceとの連携機能が強化されています。 WebLogic Server 11gとCoherenceの連携機能についてデモを交えて紹介いたします。2011/3/9アジェンダ1「WebLogic Server 11g(10.3.4)の新機能のご紹介」日本オラクル 野邊 哲男WebLogic Serverの最新バージョンである11g(10.3.4)では、Oracle RACとの連携やクラスローダ関連について新しい特徴的な機能が追加されています。当セッションでは、これらの機能について一部デモを交えて説明します。アジェンダ2「Oracle WebLogic Server on JRockit Virtual Edition技術検証報告」CTC伊藤忠テクノソリューションズ(株) 井澤 信悦 氏初期設定と動作環境および条件、NFS, SSHの設定とドメインの作成、Oracle VM Server上へのデプロイとサーバの起動・停止などの操作、Webアプリケーションのデプロイ、性能測定結果と考察、物理環境から仮想環境への移行方法などを解説します。2011/2/9アジェンダ1「WebLogic Server総復習」日本オラクル 佐々木政和これまでのWebLogic Server勉強会の中からWebLogic Serverの開発コンセプト、歴史、エンタープライズシステムの要件、スレッド管理、JRockitのスレッドダンプ分析、運用管理の現場を変えるツールの紹介などを復習します。アジェンダ2「WebLogic ServerのMBeanとその監視について」日本オラクル 野邊 哲男WebLogic Serverは、JMX MBeanという標準技術に基づき実行時の状態や構成内容などをモニタリングできる仕組みを提供しています。当セッションではWebLogic ServerのMBeanに関する基本事項や主要なMBeanの監視方法について例を交えて説明いたします。2010/11/10アジェンダ1「WebLogic Serverを極め���(���1回)」日本オラクル 丹羽 明KROWNに登録されたサポート診断サービスを参考にしながらコアサーバの異常時、サーバハング、メモリ関連の問題の発生原因と解決方法の診断プロセスを解説します。アジェンダ2「Oracle ASからWebLogicへの移行注意点」日本オラクル 野邊 哲男Oracle ASではOC4J (Oracle Containers for J2EE)というJ2EE 1.4ベースのコンテナを提供していましたが、その環境やアプリケーションをWebLogic Server 11gに移行する際の注意点について解説します。また、Oracle ASのJava以外のアプリケーションの移行に関する情報についても説明いたします。2010/8/4アジェンダ1「WebLogic Server クラスローダー・インターナル」日本オラクル 鈴村 圭史アジェンダ2「WebLogic Serverのサポートの事例から」日本オラクル 軒原 翼アジェンダ3「O/RマップとData Gridを融合させるOracle TopLink Gridのご紹介」日本オラクル 野邊 哲男2010/5/28アジェンダ1「WebLogic Serverのアーキテクチャを見える化する」日本オラクル 永井英一、軒原 翼アジェンダ2「全ての挙動は記録される。高信頼性JVMの現在」日本オラクル 佐藤 直生2010/2/16アジェンダ1「これだけは知っておきたいWebLogic ServerのJDBCデータソース」日本オラクル 野邊 哲男アジェンダ2「WebLogic Server デプロイメント インターナル, 最低限の運用管理術」日本オラクル 軒原 翼2009/11/19アジェンダ1「WebLogic Server開発系、運用系パネルディスカッション」京セ����式会社 大谷 俊英氏 日本オラクル 野邊 哲男, 軒原 翼、(モデレータ)佐々木 政和2009/8/19アジェンダ1「WebLogic Serverの超便利「WebLogic Scripting Tool & JRockit解析ツール」入門 日本オラクル 永井 英一アジェンダ2「開発者視点の注目新機能はズバリこれ!― Oracle WebLogic Suite 11gを徹底解説」日本オラクル 野邊 哲男アジェンダ3WebLogic Serverハング時のスレッドダンプの重要性とその取得方法日本オラクル 軒原 翼2009/6/26アジェンダ1「WebLogic Serverの実践技術情報」日本オラクル 後藤 哲明アジェンダ2「WebLogicとOracle Databaseで実践する勝てる経営管理システム構築」京セラ株式会社 大谷 俊英氏アジェンダ3「これからのJava EEアプリケーションの開発スタイルを考える」株式会社クロノス 奥 清隆氏

「WebLogic Server勉強会@大阪」一覧表です。過去の大阪での開催内容や資料と今後の予定をまとめています。「WebLogic Server勉強会@東京」一覧表」と併せてご覧ください。 WebLogic Server勉強会開催カレンダー 大阪 開催日 アジェンダ 2017/5/31 参加申し込み 受付中 アジェンダ1 「IaaSでWebLogic Server環境を構築しよう!」 Oracle...

01. 特集 - WebLogic Server

7月21日「WebLogic Server勉強会」参加申し込み受付中です。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。7月21日に「第58回WebLogic Server勉強会@東京」を開催します。今回は「マルチテナント環境における WebLogic Server 管理」、「サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!」です。今回もオンライン「ライブ中継」を行います。オラクル青山センターの「WebLogic Server勉強会@東京」会場の雰囲気を全国に生中継致します。オンラインでご参加される場合も参加申し込み手続きが必要になりますのでご注意ください。日本オラクルセミナー事務局からのメールにオンラインでの参加方法(会議URL、パスワードなどの情報)が記載されています。(日本オラクル Fusion Middleware事業本部 佐々木 政和)「第58回WebLogic Server勉強会@東京」概要主催:日本オラクル株式会社日程:7月21日(木)19:00~20:30 (受付開始 18:30~)会場:日本オラクル株式会社 本社 13Fセミナールーム or オンライン (事前登録制)問合せ:日本オラクル セミナー事務局    E-Mail: oracle-events2_jp@oracle.comアジェンダ19:00-19:05 オープニング19:05-19:55 「マルチテナント環境における WebLogic Server 管理」Oracle WebLogic Server 12.2.1 で新しく導入されたマルチテナント機能を使用するためのドメイン管理のポイントをご紹介します。マルチテナント環境における JDBC や JMS 、セキュリティなどリソース設定やドメインの監視方法、デプロイされたアプリケーションへのアクセス方法などがどのように変わるのか?(変わらないのか?)を解説します。日本オラクル株式会社 オラクルユニバーシティ  岡田 大輔20:05-20:55 「サポートエンジニアが語る。WebLogic Server のリクエスト処理フロー見える化!」サポートエンジニアの観点から、WebLogic Server がリクエストを受け付け、トランザクションを処理し、データベースにコミットするまでの処理フローを見える化します。開発の現場、デバッグやトラブルシューティングなどでも役に立ついくつかの実践的な方法を組み合わせて説明します。Java EE アプリケーションの開発をしている方や、これから始めようとしている方におすすめのセッションです。日本オラクル株式会社 テクノロジーサポート本部 東 健太郎参加申し込み会場参加、オンライン参加共に参加申し込みページからお申し込みください。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。7月21日に「第58回WebLogic Server勉強会@東京」を開催します。今回は「マルチテナント環境における WebLogic Server 管理」、「サポートエンジニアが語る。WebLogic...

05. コラム - WebLogic勉強会 通信

第56回WebLogic Server勉強会速報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。昨日2016年1月28日に開催された「第56回WebLogic Server勉強会@東京」の速報です。初めのセッションでは、日本オラクルの新井さんが「Oracle WebLogic Server最新情報」と題してWebLogic Server 12cR2の特長と2月16日の「クラウド時代のJavaプラットフォーム」イベントのセッション内容と見どころを紹介しました。次のセッションでは、日本オラクルの岡田さんが、「Oracle WebLogic Serverで学ぶJava EE 7 アプリケーション開発とデプロイ」の中でJava EE とは?、Java EE アプリケーションの開発、Java EE アプリケーションのデプロイの順にポイントを解説しました。途中オンラインの音声中継に不具合がありご迷惑をお掛けしました。お詫びいたします。次回は2月16日の「WebLogic Server勉強会(特別編)」です。同日午後2時半からの「クラウド時代のJavaプラットフォーム」に続いて開催されます。ぜひ、ご参加ください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)クラウド時代のJavaプラットフォーム 日本オラクルの新井さんが来る2月16日に開催される「クラウド時代のJavaプラットフォーム」と題したセミナーの各セッション内容について説明しました。このイベントは企業の情報システム部門の責任者・マネージャ、情報システム部門やシステム構築を担当する関連会社、 システムインテグレータ、エンタープライズJavaに携わるアーキテクトおよびプロジェクトマネージャを対象にしたセミナーです。Keynote: Innovation of Enterprise Java Platform 初めのKeynoteセッションではオラクル・コーポレーションの製品管理担当バイスプレジデントのマイク・リーマンがエンタープライズJavaが向かうべきクラウドの方向性と、それを具現化するWebLogic Serverの進化について直接ご説明します。WebLogic Server 12cR2を中核とするオラクルのエンタープライズJava基盤、及びクラウドサービスの進化について米国オラクル本社から最新情報をお届けします。Oracle WebLogic Server 12cR2 登場!最新版のWebLogic Server 12cR2は、Java EE 7完全対応、従来の仮想化を超えた集約基盤を実現するWebLogicマルチテナント、DockerやMavenと連携したDevOpsの実践など、エンタープライズJavaを変える重要機能を提供します。従来のWebLogic Serverの機能を整理しながらJava EE 7, DevOps, マルチテナント等のWebLogic Server 12cR2の新機能を幅広くご紹介します。基幹系システムをクラウド化せよ!マルチテナントというアプローチ従来の仮想化を超えたシステム集約と運用効率化を実現する、WebLogicマルチテナントの機能と利用価値について説明します。エンタープライズJavaを活かす、オラクルクラウドの今オラクルのパブリッククラウド、及びプライベートクラウドへの新しい提案についてご紹介します。 Java EEの歴史 ご存知のようにJava EE (Enterprise Edition)の仕様は、Javaで企業向けアプリケーションを構築するために、Java SE (Standard Edition)の仕様では不十分と思われる機能を実現するためにJCP (Java Communication Process)の中で検討を重ねて来た経緯があります。リリース毎に特長があるわけですが印象深いのはJava EE 5の時に開発者の生産性を高めるために「Ease Of Development」を大きく打ち出し、同時にOSSで実績のある機能が標準として採用されたことです。それ以降、Java EE 6、7は開発作業の効率アップのために必要なものがどんどん組み込まれています。アノテーション、JAX-RS、WebSocketなど。WebLogic Server 12.2.1 (12cR2)はJava EE 7に準拠しています。Java EE 7 Java EE アプリケーションと仕様 Java EEはアプリケーションの中でプレゼンテーション層、ビジネスロジック層、永続化層それぞれの目的に沿った形で仕様が決められています。例えば、プレゼンテーション層でブラウザからのHTTPリクエストを受けとり、そのリクエストに応じたビジネスロジックを呼び出し、その結果をブラウザに返すような一連の処理に必要なフレームワークであったり、各種のAPIを規定しています。WebLogic Server と Java EE Java EEは仕様を取り決めたものです。WbLogic ServerはWebアプリケーションサーバでJava EE の仕様に準じたアプリケーションを動かすために実装されています。アプリケーション開発者はJava EEの仕様に沿ってアプリケーションを開発します。つまり、フレームワークやAPIのそれぞれの役割を理解しプログラミング(アノテーションは環境設定も含む)します。WebLogic Serverは、Java EEのアプリケーションが快適に動作するための特長(高性能、高信頼性、高スケーラビリティ、柔軟性に優れる、運用管理の容易さ、などなど)を備えて実装されています。具体的には、アプリケーションの起動や停止、各リソースの管理、共有資源の制御、トランザクションやセキュリティの制御、各種リカバリやフェールオーバー、負荷分散、データベース連携、スレッドプールやコネクションプール管理などなど。サンプル Web アプリケーションの構成 (概要) 今回、岡田さんがデモ用に作成したWebアプリケーションの全体像です。プレゼンテーション層にJSF、ビジネスロジック層にEJB(JAX-RSも!)それからマネージドBeanにCDI、データアクセス層にはJPAを使用しています。WebLogic Server勉強会では2014年5月27日から10月29日まで全4回で「はじめてのJava EEアプリケーション開発」シリーズを開催しました。「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の第1回から4回までの資料「第1回 Java EE&WebLogic Server入門」(2014年5月27日)「第2回 JSF入門」(2014年6月24日)「第3回 EJB&CDI入門」(2014年8月27日)「第4回 JPA入門」(2014年10月29日)を参考に「はじめてのJava EEアプリケーション開発シリーズ」を総復習してください。多くの開発者の皆様が、あるいは普段開発はしていないがJava EEがどのような仕様かを学ぶために参加された多くの方に好評でした。Java EEが仕様であることは分かる、しかし、Java EEを使ったアプリケーションがどのようなプログラミングであるか、そこを知りたかった。昔、Java以外でアプリケーションを開発していた人が、「Java EEの良さが分かった」というお礼をいただいたことを思い出しました。このセッションでは、特長的なAPIを取り上げ、プログラミングのスタイルを説明しています。非javaプログラミング経験者がJava EEの雰囲気をつかむのに最適な資料です。先のシリーズを復習しながら資料をご覧いただければと思います。アプリケーションのデプロイメント アプリケーションのデプロイについては、各アプリケーションサーバの特長が出るところです。WebLogic Serverの場合の運用管理は、インストール後にドメイン作成、管理サーバ、管理対象サーバの環境設定、続いてアプリケーションのデプロイという作業、データベース接続のためのデータソースの作成などがあります。WebLogic Server勉強会でも毎年、デプロイを取り上げたセッションを行って来ました。Tipsやノウハウなど、過去の資料とともに復習されることをお薦めします。オンライン生中継の不具合についてのお詫び前回に引き続き、オンライン生中継に多数の皆様がご参加くださったこと、誠にありがとうございました。しかしながらオンライン(およびオフライン)でご参加の皆さまに一部通話中の雑音や発表音声の中断などの事態が発生してしまい大変残念な勉強会になったことをお詫びします。大変申し訳ありません。次回は万全の体制にて望みたいと思いますので、今回の不手際お許しください。引き続き、WebLogic Server勉強会にお付き合いください。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 昨日2016年1月28日に開催された「第56回WebLogic Server勉強会@東京」の速報です。 初めのセッションでは、日本オラクルの新井さんが「Oracle WebLogic Server最新情報」と題してWebLogic Server 12cR2の特長と2月16日の 「クラウド時代のJav...

05. コラム - WebLogic勉強会 通信

1月28日「WebLogic Server勉強会」参加申し込み受付中です。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。1月28日に「第56回WebLogic Server勉強会@東京」を開催します。今回は「Oracle WebLogic Serverで学ぶJava EE 7アプリケーション開発とデプロイ」、「Oracle WebLogic Server最新情報」です。前回に引き続きオンライン「ライブ中継」を行います。オラクル青山センターの「WebLogic Server勉強会@東京」会場の雰囲気を全国に生中継致します。オンラインでご参加される場合も参加申し込み手続きが必要になりますのでご注意ください。日本オラクルセミナー事務局からのメールにオンラインでの参加方法(会議URL、パスワードなどの情報)が記載されています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「第56回WebLogic Server勉強会@東京」概要主催:日本オラクル株式会社日程:1月28日(木)19:00~20:30 (受付開始 18:30~)会場:日本オラクル株式会社 本社 13Fセミナールーム or オンライン (事前登録制)問合せ:日本オラクル セミナー事務局    E-Mail: oracle-events2_jp@oracle.comアジェンダ19:00-19:05 オープニング19:05-19:20 「Oracle WebLogic Server最新情報」企業向けのアプリケーションサーバとして多くの実績を持つWebLogic Serverの最新版WebLogic Server12.2.1のクイックアップデートと関連イベントの案内、WebLogic ServerのPaaS (Platform as a Service)サービスの最新情報を紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部新井 庸介19:20-20:30 「Oracle WebLogic Serverで学ぶJava EE 7アプリケーション開発とデプロイ」最新のJava EE 7 (Java Enterprise Edition 7)の基礎から主要な仕様の概要を説明し、実際のアプリケーション開発の流れをデモを交えて説明します。最新のJava EE仕様を理解したい人はもちろん、これからJava EEを学ぶ人は必見です。日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔* 都合により、先の案内からアジェンダの順番を変更しました(1/28/2016:上記が最新)。* 進行状況により、アジェンダの時刻が前後する場合があります。ご了承ください。オンライン参加手順(事務局からのアクセス情報を元に下記の手順でお願いします。)手順1. WebExミーティングリンクにアクセス手順2. ミーティング番号を入力手順3. ミーティングパスワードを入力手順4. メールアドレス、お名前を入力手順5. 音声接続:コールインまたはコールバックどちらかの方法で電話接続をお願いします。コールインの場合下記の電話番号をダイヤルします。03-6834-6185または03-4503-6068アクセスコードを入力します。セキュリティコードを入力します。コールバックの場合(推奨)コールバック番号に自分の電話番号を指定します。WebExから電話がかかってきます。(無償で音声を聞くことができます。)アクセスコードは上記と同じです。電話番号の設定方法国/地域 81(日本Japanを選択)市外局番の0を除くご自分の電話番号例:(日本)312345678 (03-1234-5678の場合)ご注意:オンラインの音声回線数に制限がありますのでご注意ください。当日、早めに接続されることをお薦めします。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。1月28日に「第56回WebLogic Server勉強会@東京」を開催します。今回は「Oracle WebLogic Serverで学ぶJava EE 7アプリケーション開発とデプロイ」、「Oracle WebLogic Server最新情報」です。前回に引き続きオンライン「ライブ中継」を行います...

05. コラム - WebLogic勉強会 通信

ライブ配信します。10/22: 19:00-21:00 第55回WebLogic Server勉強会

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。10月22日に「第55回WebLogic Server勉強会@東京」を開催します。すでに大勢の方から参加申し込みを頂戴しております。ありがとうございます。今回、初めてWebExを使用したライブ配信を行う予定です。ライブ配信の手順をまとめましたので、東京地方以外の皆様、是非、オンラインでご参加ください。なお、音声配信数に制限がありますので、早めに参加されることをお薦めします。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「第55回WebLogic Server勉強会@東京」概要主催:日本オラクル株式会社日程:10月22日(木)19:00~21:00 (受付開始 18:30~)会場:日本オラクル株式会社 本社 13Fセミナールーム (事前登録制)オンライン参加問合せ:日本オラクル セミナー事務局    E-Mail: oracle-events2_jp@oracle.comアジェンダ19:00-19:05 オープニング19:05-19:45 「WebLogic Server+Oracle Database連携の基礎から応用」WebLogic Serverとデータベース接続の運用管理全般の基礎から応用を説明します。データソースの役割と仕組み、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。日本オラクル株式会社 オラクルユニバーシティ岡田 大輔19:45-19:55 休憩19:55-20:25 「WebLogic Server+Oracle Databeseアプリケーション管理をシンプルに!」Webアプリケーションの開発、テスト、運用中に「アプリケーションの見える化する手段があれば、 迅速にボトルネックや障害の原因を発見できるのに」と思ったことはありませんか? 複雑な構成において、全体のトポロジーを見たり、データソース接続状態が一目で分かります。デモを交えてOracle Enterprise Managerの実践テクニックを紹介します。日本オラクル株式会社 Fusion Middleware事業統括本部関屋 信彦20:25-20:55 「クラウドを活用したWebLogic Server+Oracle Database開発スタイル」Oracle Cloud PlatformのコンセプトからDatabase Cloud Service、Java Cloud Service、Developer Cloud Serviceの特長や活用シーンをデモを交えて紹介します。クラウドを活用することでWebLogic Server+Oracle Databaseの開発プロジェクトがますます効率アップ。アプリケーション開発環境が変わります。日本オラクル株式会社 Fusion Middleware事業統括本部新井 庸介* 進行状況により、アジェンダの時刻が前後する場合があります。ご了承ください。オンライン参加手順(事務局からのアクセス情報を元に下記の手順でお願いします。)手順1. WebExミーティングリンクにアクセス手順2. ミーティング番号を入力手順3. ミーティングパスワードを入力手順4. メールアドレス、お名前を入力手順5. 音声接続:コールインまたはコールバックどちらかの方法で電話接続をお願いします。コールインの場合下記の電話番号をダイヤルします。+81-368346185 (日本) Primary Dial in Number+81-345036068 (日本) Alternate Dial in Numberアクセスコードを入力します。セキュリティコードを入力します。コールバックの場合(推奨)コールバック番号に自分の電話番号を指定します。WebExから電話がかかってきます。(無償で音声を聞くことができます。)アクセスコードは上記と同じです。電話番号の設定方法国/地域 81(日本Japanを選択)市外局番の0を除くご自分の電話番号例:81-312345678 (03-1234-5678の場合)お願い:音声は必ず「Mute」にしてください。今回、初めてオンラインライブ配信を行います。音質、画質レベルが未知であること、運営や進行など不慣れなところがございます。スタッフ一同最善を尽くしますが、不具合、至らぬ点など何卒ご容赦ください。今後、改善するように継続的に取り組んでまいります。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。10月22日に「第55回WebLogic Server勉強会@東京」を開催します。すでに大勢の方から参加申し込みを頂戴しております。ありがとうございます。今回、初めてWebExを使用したライブ配信を行う予定です。ライブ配信の手順をまとめましたので、東京地方以外の皆様、是非、オンラインでご参加ください...

05. コラム - WebLogic勉強会 通信

3月18日「WebLogic Server勉強会」を名古屋で開催します。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。来週3月18日に名古屋で「WebLogic Server勉強会」を開催します。参加申し込み受付中です。今回は、「WebLogic Serverとデータベース接続の基礎から応用」と「クイズで確認!WebLogic Serverのデータソース 」の2セッションを行います。前半は、WebLogic Serverとデータベース接続の運用管理全般を説明します。Javaアプリケーションからデータベースをアクセスするための基礎技術、データソースや接続プールの設定方法、データソースの監視方法、Oracle RACとの接続や推奨/注意事項について解説します。是非、この機会にWebLogic Serverを使ったアプリケーション開発、データベース連携の運用管理の流れを習得してください。参加申し込みは【しゃちほこオラクル倶楽部】WebLogic Server勉強会@名古屋からお願いします。。名古屋での開催は3年ぶりになります。名古屋地区の皆様、お会いできるのを楽しみにしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。来週3月18日に名古屋で「WebLogic Server勉強会」を開催します。参加申し込み受付中です。今回は、「WebLogic Serverとデータベース接続の基礎から応用」と「クイズで確認!WebLogic...

05. コラム - WebLogic勉強会 通信

大阪(2/4)と東京(2/24)で「WebLogic Server勉強会」開催します。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。来月から大阪と東京で2015年「WebLogic Server勉強会」が始動します。大阪地区の皆様、大阪開催は2月4日(水)です。「WebLogic Serverのチューニング特集」です。WebLogic Serverのスレッド制御の仕組みやJVMのGC, Flight Recorderなど盛りだくさんです。「第139回 夜な夜な!なにわオラクル塾 - Oracle WebLogic Server チューニングのポイント」から参加申し込みをお待ちしています。それから、東京開催は2月24日(火)です。久しぶりにJMSを取り上げます。Javaのメッセージングプログラミング&コンフィグレーションを是非マスターしてください。「LTセッション」は、CTCの橋本氏にWebSocketのテスト体験を語っていただきます。また「お悩み相談室」ではWebLogic Server関係の質問(何でも)お待ちしています。参加申し込みは第52回WebLogic Server勉強会@東京>からお願いします。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。来月から大阪と東京で2015年「WebLogic Server勉強会」が始動します。大阪地区の皆様、大阪開催は2月4日(水)です。「WebLogic Serverのチューニング特集」です。WebLogic Serverのスレッド制御の仕組みやJVMのGC,...

01. 特集 - WebLogic Server

本年もお世話になりました。良いお年をお迎えください。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。WebLogic Server勉強会事務局は本日が年内の仕事納めです。2014年も多くの開発者、運用管理者の皆様のご参加ありがとうございました。東京と大阪合わせて720名を超える皆様とお会いすることができました。来年2015年の20年前、1995年は記念すべき年でした。この年に米国SUN MicrosystemsがJavaを発表しました。また米国WebLogic Inc.が設立されWebLogic Serverの原型となったTengah製品が世に登場しつつあった年でもあります。記念すべき満20歳を迎えるWebLogic Serverの勉強会は2月からスタートします。本年同様によろしくお願いいたします。皆様、良いお年をお迎えください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 WebLogic Server勉強会事務局は本日が年内の仕事納めです。2014年も多くの開発者、運用管理者の皆様のご参加ありがとうございました。東京と大阪合わせて720名を超える皆様とお会いすることができました。来年2015年の20年前、1995年は記念すべき年でした。この年に米国SUN Micr...

05. コラム - WebLogic勉強会 通信

「JPA入門」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年10月29日に開催された「第50回WebLogic Server勉強会@東京」「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回「第4回 JPA入門」(10月29日)をレポートします。岡田さんがJPA (Java Persistence API)の特長、O/Rマッピング、EJBからのJPAの利用方法などを解説しました。第1回から3回までの資料「第1回 Java EE&WebLogic Server入門」(5月27日)、「第2回 JSF入門」(6月24日)、「第3回 EJB&CDI入門」(8月27日)と併せて「はじめてのJava EEアプリケーション開発シリーズ」を総復習してください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JPA入門2014年10月29日に「第50回WebLogic Server勉強会@東京」が開催され、日本オラクル オラクルユニバーシティの岡田 大輔さんが、JPA (Java Persistence API)の特長、O/Rマッピング、EJBからのJPAの利用方法などを解説しました。JPAはJavaアプリケーションのデータベースアクセスをシンプルに、効率良く実装するためのO/Rマッピングの仕様です。ここではポイントを中心にレポートします。JPA (Java Persistence API)とは JPA 2.0は Java EE 6 で使用可能な標準ORマッピング・フレームワークです。ORマッピングはJavaのオブジェクトとRDBのデータをマッピングして相互運用するしくみを示し、Java SE 環境でも Java EE 環境でも使用することが可能です。Java SEの場合はアプリケーション管理の永続性が使用できます。Java EEの場合は、アプリケーション管理の永続性およびコンテナ管理の永続性が使用可能です。 アプリケーション開発者の視点でJDBCとJPA(ORマッピング)のプデータベースアクセスロジック(プログラミング)を見て見ましょう。JDBCを使用した例は、SQLを組み立ててデータベースにリクエストを送り、返ってきたデータをバリューオブジェクトに挿入するロジックになります。一方JPAを使用した例は、エンティティとRDBとのデータ変換をEntityManager APIで行うため大幅にコードが削減されています。JPAがエンティティからDBアクセスロジックを処理するのでアプリケーションはデータベースを意識する必要はありません。 JPAはいくつかの構成要素から構成されます。EntityManagerはエンティティの操作(CRUD)を行うためのAPIを提供します。EntityManagerはデータソースやEntityManagerのトランザクション・タイプなどを指定する永続性ユニット(persistence.xml)の設定に基づいて、EntityManagerのインスタンスを生成するEntityManagerFactoryファクトリクラスから生成されます。persistence.xml はEntityManagerが使用する永続性ユニットの名前、トンランザクション・タイプ、永続性プロバイダ、データベース接続設定 (Java EEアプリケーションの場合はデータソース名)、永続性ユニットが管理するエンティティクラスのような永続化のための構成情報を含みます。永続性ユニットのトランザクション・タイプ(transaction-type)は、EntityManagerがJTAトランザクションを使用するか、リソース・ローカル・トランザクションを使用するかを指定します。Java EE環境ではJTAがデフォルトで、Java SE環境ではRESOURCE_LOCALがデフォルトです。 (インストール先の環境により異なるので注意)エンティティクラスを作成しよう! 左がエンティティクラスで実際のオブジェクトで、右がデータベースです。エンティティクラス名と データベースのテーブル名に相当します。エンティティクラスは永続化されるデータをあらわすクラスで、EntityManagerによって管理されます。POJO(Plain Old Java Object)として実装します。クラスには @Entity 注釈を指定してエンティティクラスであることを示します。永続ストアのキー(主キー)に関連付けられた一意のIDを持ちます。主キーには@Id注釈を指定します。エンティティの要素(POJOのフィールド)にアクセスするためにアクセサ・メソッドやJPQLなどを使って問い合わせすることができます。 主キー オブジェクトを識別するためのキーを指定します。自動生成の仕組みを使用することが可能です。SEQUENCEを使用した例。マッピングのオーバーライド デフォルトはテーブル名とエンティティクラス名は同じ名前とみなされます。大文字小文字は区別しません。 ウィザードでマッピングを指定して異なる名前を使用することも可能です。時刻処理 エンティティ側での日付や時刻を扱う場合は@Temporal注釈でSQL型とマッピングします。一時フィールド 小計のようなデータベースに持つ必要が無いフィールドの使用方法永続の対象からはずしたいフィールドTransientを使用してカスタマイズすることが可能です。デフォルトと違う場合に指定します。(デフォルトが何かを知る必要がある)EntityManagerの取得 Java EEの場合はCDIが使用できるので、@PersisitenceContextを使用できます。エンティティのライフサイクル 状態管理の説明新規作成の場合はEntitiyManagerに対してpersistを呼び出すことで管理対象になりデータベースにマッピングされます。- 永続化(em.persist(entity);)データベースにエンティティを永続化します。(SQLのINSERT文に相当)- 検索(em.find(Product.class, custId);)主キーに基づいてエンティティを検索します。(SQLのSELECT文に相当)- 更新管理対象エンティティをsetterメソッドで更新すると変更が永続ストアに反映されます。(SQLのUPDATE文に相当)管理対象ではない(デタッチ状態)エンティティを更新する場合は、mergeメソッドで管理対象エンティティを取得します。(em.merge(entity);)- 削除(em.remove(em.merge(entity));管理状態にしてからmergeを実行する例)管理対象エンティティを削除すると変更が永続ストアに反映されます。(SQLのDELETE文に相当)オブジェクトに対する問い合わせ 主キー以外の操作を行うような場合にエンティティに対する問い合わせ言語としてSQLに似たJPQL(Java Persistence Query Language)を使用することができます。バージョンを重ねるごとにJPQLで使用できる機能は拡張されています。複雑な問い合わせはまとめて実行するのがお勧め。 プログラムの中からJPQLの問い合わせをしたい場合は、QueryクラスまたはTypedQueryクラスを使用することができます。Queryは型指定されていない問い合わせのため、問い合わせ結果にアクセスするには必要に応じてキャストを行います。TypedQueryは作成時に型指定されるので、問い合わせ結果はエンティティ型で返されます。JPQLは、JDBCのPreparedStatementのようにパラメータ付きも使用できます。名前付きパラメータの代わりに位置パラメータ (?1) も使用できます名前付き問い合わせ エンティティ・クラスで@NamedQuery属性を使用してあらかじめ問い合わせを宣言しておき、それを呼び出す側(EJBなどから)はcreateNamaedQueryで呼び出して使用する方法です。NamedQueryの名前は自由ですが、慣習としてエンティティの名前ドット問い合わせの名前を使用します。問い合わせを利用する場合はgetResultlistまたはgetSingleResultを使用します。getSingleResultは単一結果が返ります。複数、または結果が無かった場合は例外がスローされます。NativeQuery と Criteria API NativeQueryを使用すると問い合わせをJPQLでは無くSQLを直接記述することができます。型の安全性を高めるためにJPA 2.0から追加された機能としてCriteria APIがあります。Criteria APIを使用することで実行時ではなく、コンパイル時にエラーを検出できます。まとめ 2014年10月29日に開催された「第50回WebLogic Server勉強会@東京」「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回「第4回 JPA入門」(10月29日)のポイントをまとめて見ました。第1回から3回までの資料「第1回 Java EE&WebLogic Server入門」(5月27日)、「第2回 JSF入門」(6月24日)、「第3回 EJB&CDI入門」(8月27日)も参考に「はじめてのJava EEアプリケーション開発シリーズ」を総復習してください。次回(12月18日)のWebLogic Server勉強会@東京は、初心者向けのOracle WebLogic Server入門セッションです。ソフトウェアのインストールからアプリケーションを動かすために必要なOracle WebLogic Serverの各種設定方法を解説します。また、5月から10月まで全4回で開催された「はじめてのJava EEアプリケーション開発シリーズ」で作成したプログラムを使用してJava EEアプリケーションのデプロイメント方法をステップ・バイ・ステップで説明します。皆様のPC環境で動作させることができます。ご参加をお待ちしています。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年10月29日に開催された「第50回WebLogic Server勉強会@東京」 「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回 「第4回 JPA入門」(10月29日)をレポートします。岡田さんがJPA (Java Persistence...

05. コラム - WebLogic勉強会 通信

10月29日「JPA入門」参加申し込み受付中: JavaOneのレアグッズあり。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年10月29日に「第50回WebLogic Server勉強会@東京」が開催されます。「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回「JPA入門」です。JPA (Java Persistence API)はJavaアプリケーションのデータベースアクセスをシンプルに、効率良く実装するためのO/Rマッピングの仕様です。JPAの特長、O/Rマッピング、EJBからのJPAの利用方法などを解説します。今回初めて参加される方も大歓迎です。「第1回 Java EE&WebLogic Server入門」(5月27日)、「第2回 JSF入門」(6月24日)、「第3回 EJB&CDI入門」(8月27日)を参考に前3回分のキャッチアップをしてご参加ください。後半のセッションは「Java EE入門シリーズの総復習」です。クイズ形式でJava EEアプリケーション開発シリーズのポイントを振り返ります。クイズ優勝者には米国で開催されたJavaOne 2014のレアグッズをプレゼントします。また、じゃんけん大会もありますのでゲットするチャンスあり、お楽しみに。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「第50回WebLogic Server勉強会@東京」申し込み受付中2014年10月29日に「第50回WebLogic Server勉強会@東京」が開催されます。前半は「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回「JPA入門」です。後半は、「Java EE入門シリーズの総復習」です。JPA入門日本オラクル オラクルユニバーシティの岡田 大輔さんが、JPA (Java Persistence API)はJavaアプリケーションのデータベースアクセスをシンプルに、効率良く実装するためのO/Rマッピングの仕様です。JPAの特長、O/Rマッピング、EJBからのJPAの利用方法などを解説します。・JPAとは?・エンティティクラスの作成・エンティティの検索・更新・削除・JPQL/Criteria APIを使った問い合わせ・EJBやJSFからのJPAの操作・トランザクションなど。今回で第1回から第4回までの解説で使用したアプリケーションが完成します。参加できなかった回の資料を公開しています。また、「WebLogic Server勉強会通信」でも取り上げていますので、ぜひ、本番参加前に目を通してください。「第1回 Java EE&WebLogic Server入門」(5月27日)、「第1回 レポート」、「第2回 JSF入門」(6月24日)、「第2回 レポート」、「第3回 EJB&CDI入門」(8月27日)、「第3回 レポート」Java EE入門シリーズの総復習5月から全4回で開催された「はじめてのJava EEアプリケーション開発」シリーズの総復習をクイズ形式で行います。Java EEの主要な仕様、JSF (JavaServer Faces), EJB (Enterprise JavaBeans)、CDI (Context Dependency Injection)、JPA (Java Persistence API) などの特長や機能に関して間違いやすい点をクイズとして出題します。Java EEの知識整理の場としてご活用ください。クイズ優勝者の方には素敵なプレゼントを用意しました。また、「じゃんけん大会」も行いますので初心者を含め参加者全員がレアグッズをゲットとするチャンスです。参加申し込みをお待ちしております。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年10月29日に「第50回WebLogic Server勉強会@東京」が開催されます。 「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の最終回 「JPA入門」です。JPA (Java Persistence...

05. コラム - WebLogic勉強会 通信

「EJB&CDI入門」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年8月27日に開催されました「第49回WebLogic Server勉強会@東京」の前半のセッション「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の「第3回 EJB&CDI入門」をレポートします。講師は日本オラクル オラクルユニバーシティの岡田さんです。岡田さんがEJB(Enterprise JavaBeans)3.1の概要、セッションBeanの種類、トランザクション制御、依存性の注入によるコンポーネント間の連携、Beanのライフサイクル管理などを解説しました。アプリケーション開発の生産性向上のために、なぜEJBが有効か?EJB3.1は以前のEJBと何が違うのか?などぜひ、この機会にEJBとCDIによる開発スタイルの感覚を身に付けてください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)はじめにまずは「Java EE」のおさらいから。Java EEは、Java SEをベースにした企業システム向けのフレームワークで、コミュニティ主導のエンタープライズソフトウェア標準仕様です。コンポーネント仕様とサービスアクセスのための各種APIが規定されています。Java EEの標準規格に則ったAPIを使ったプログラムは、アプリケーションの移植性が高く、企業のIT資産として将来的にも有効に活用できます。ソフトウェア製品ベンダーは、Java EEに準拠したコンポーネントを制御するための基盤をアプリケーションサーバ製品として提供しています。そのひとつが、Oracle WebLogic Serverです。 Java EE 6の主要な仕様として、JSF2.1(前回のWebLogic Server勉強会@東京で取り上げました)、Servlet 3.0、JAX-RSや今回のテーマのEJB3.1, CDIがあります。Enterprise JavaBeans (EJB) 3.1は、Java EE 6のサーバ側のコンポーネントアーキテクチャベースの仕様です。EJB 3.1を使用することで、Javaテクノロジに基づいて、安全でポータブルな分散トランザクションアプリケーションを迅速かつ容易に開発することができます。EJB3.1のメタデータアノテーション(注釈)を使用してアプリケーション開発を簡略化する方法を中心に説明します。第1回、第2回の資料は、「第1回 Java EE&WebLogic Server入門」(5月27日)、「第2回 JSF入門」(6月24日)を参照ください。アプリケーション構成図 アプリケーションの構成図です。プレゼンテーション層としてユーザインタフェースを行う部分が第2回で説明した部分。データアクセス層で永続化を取り上げるのが次回第4回のテーマです。今回は真ん中のビジネスロジック層について説明します。 今回作成するアプリケーションのコードを表示しています。前回作成したメニューを表示するindex.xhtmlと一覧を表示するlist.xhtmlからManagedBeanで呼ばれるビジネスロジックをステートレスセッションBeanで作成します。 このアプリケーションは最終的にはデータベースに問い合わせてデータを操作するのですが、データ層は次回のテーマなのでその部分はダミーロジックのままです。 コンポーネントアーキテクチャEJB(Enterprise JavaBeans)は再利用可能なビジネスロジックを提供するためのコンポーネント仕様です。セッションBeanはクライアントから送られてきたリクエストに対するビジネスロジックを記述します。(今回のテーマ)リクエストに対してレスポンスを返す際に、同期、非同期型処理が可能です。メッセージドリブンBeanはJMSメッセージ受信時に実行するビジネスロジックを記述します。エンティティBeanはORマッピングとビジネスロジック(データの操作)を記述します。ただし、エンティティBeanはEJB 2.1までで、Java EE 6ではORマッピングはJPAを使用します。 アプリケーションプログラムは固有機能と共通機能に分離することができます。コンポーネントアーキテクチャは、共通の機能をコンテナ(コンポーネントの入れ物をイメージすると分かりやすい)上に実装し、アプリケーション固有のビジネスロジックをコンポーネントとして開発するアーキテクチャです。コンテナ(Java EEのWebコンテナやEJBコンテナ)はクライアントに「サービス」を提供する実行環境です。EJBコンテナは、アプリケーションサーバ上に実装されたEJB用の実行時コンテナです。このコンテナはアプリケーションサーバの起動時に自動的に作成され、Beanに対して以下のような実行時サービスを提供します(ライフサイクル管理、コード生成、セキュリティ、トランザクションの管理、ロックと同時実行性制御)。コンポーネントはアプリケーション固有のビジネスロジックですが、コンテナが提供しているサービスを利用しています。コンポーネントはコンテナによって管理されます。 コンテナが提供するサービスには、デプロイ時に宣言可能なサービス(永続化、トランザクション、セキュリティ、インジェクション)、コンポーネント制御のためのサービス(ライフサイクル管理、スレッド管理、クライアントとの通信)、コンテナプロバイダ固有のサービス(クラスタリング、負荷分散、フェイルオーバー)の3種類があります。コンテナ固有の機能について、例えば、WebLogic Serverのクラスタ機能はEJBの種類によって「振る舞い」が変わっています。アプリケーションサーバごとに独自の機能が提供されています。 コンポーネントがサービスAPIを通じてコンテナにリクエストを出す際にJava EEのAPIを使用します。(図の青の部分))EJB Lite EJB Liteは名前の通りEJB 3.1の軽量版、サブセットとして提供されるものです。ローカルクライアント、宣言的セキュリティ、トランザクション(CMT/BMT)、インターセプタなどの機能が使用できますが、メッセージドリブンBeanや非同期メソッド呼び出しなどの機能は使用できません。Web Profileまたは Java EE 6フルプラットフォームのアプリケーションサーバにデプロイできます。EJB Liteはできることに限りがあるEJBの機能制限版ですが、開発予定のアプリケーション要件に合っている場合はEJB LiteでOKでしょう。EJBはWAR内にパッケージ可能に EJB 3.1では、EJBクラスをejb-jarファイルの中にパッケージ化しなければならないという制限が取り除かれました。そのため、Webアプリケーションクラスに適用される同じパッケージ化のガイドラインを使用して、EJBクラスをWebアプリケーションアーカイブ(WAR)の中に直接パッケージ化できます。単にEJBクラスをWEB-INF/classesディレクトリかWEB-INF/libディレクトリ内のJARファイルに入れるのみです。必要に応じて、EJBデプロイメント記述子を使用する場合は、それをWEB-INF/ejb-jar.xmlとしてパッケージ化できます。 セッションBeanセッションBeanはビジネスロジックを記述するコンポーネントです。クライアントからのリクエスト受信時に実行するビジネスロジックを記述します。EJB3.0からBeanファイルは、POJO (Plain Old Java Object)に注釈(アノテーション)を追加することで実装できます。(javax.ejb.SessionBeanを実装する必要はありません。)原則は同期呼び出しですがEJB3.1から非同期呼び出しの仕様が追加されました。EJB 3.1では、非同期クライアント呼出しセマンティクスでメソッドを公開できます。EJBクラスまたは特定のメソッドで@Asynchronousアノテーションを使用すると、メソッドが呼び出されたときに、クライアントに即座に制御を戻すようにEJBコンテナに指示します。メソッドはFutureオブジェクトを返して、クライアントにメソッド呼出しのステータスをチェックさせて、非同期に生成される結果の値を取得できます。EJBコンテナによってライフサイクルが管理されます。クライアントの呼び出しを受けるとEJBコンテナによってセッションBeanが呼び出されます。トランザクションやセキュティはデプロイ時に宣言可能なサービスとしてEJBコンテナが提供します。デプロイメント記述子は無くても構いませんが、カスタマイズが必要な場合はejb-jar.xmlやweblogic-ejb-jar.xmlの中で明示的に設定可能です。(競合がある場合、デプロイメント記述子の値がアノテーションの値をオーバーライドします。)WebLogic Server EJB 3.1プログラミングモデルでは、Java EE 6メタデータアノテーション機能を使用して、アノテーション付きEJB 3.1 Beanファイルを作成し、標準Javaコンパイラでクラスをコンパイルします。生成されたクラスは、デプロイメント用のターゲットモジュールにパッケージ化できます。実行時に、WebLogic Serverはアノテーションを解析して、必要な動作のアスペクトをBeanファイルに適用します。セッションBeanの種類 セッションBeanは次の3種類があります。POJOに追加する注釈によりEJBコンテナはそれぞれの仕様に応じた振る舞いを行います。1. ステートレスセッションBeanの場合はクライアントごとにインスタンスを割当てます。クライアントの状態を保持しません。2. ステートフルセッションBeanの場合はクライアントごとにインスタンスを割当てます。クライアントの状態を保持します。3. シングルトンセッションBeanはEJB3.1から加えられた新しい仕様です。シングルトンセッションBeanの場合は、、特定のJava仮想マシン(JVM)のアプリケーションごとに1回のみインスタンス化し、すべてのクライアントに共通のインスタンスを割り当てます。セッションBeanの振る舞い 1. ステートレスセッションBean呼び出し間でセッションやクライアントの状態の情報を格納しません。唯一格納されることのある状態はクライアントに固有のものではなく、キャッシュされたデータベース接続や別のEJBの参照などです。ステートレスセッションBeanが状態を格納できるのは、長くてメソッド呼出しの期間だけです。メソッドが完了すると、状態情報は維持されません。(ステートレスセッションBeanプールに戻される)ステートレスセッションBean:ステートレスセッションBeanは、ステートフルセッションBeanよりもパフォーマンスが優れています。その理由は、各ステートレスセッションBeanが複数のクライアントをサポートできるからです(ただし一度に1つ)。ステートレスセッションBeanのクライアントは、Webサービスエンドポイントにできます。2. ステートフルセッションBean:特定のクライアントとの対話を反映する状態情報をメソッドやトランザクションをまたがって維持します。ステートフルセッションBeanは、クライアントと他のEJBの対話を管理したり、ワークフローを管理できます。クライアントごとに保持されますので、クライアント数が多くなれば大きなHeap領域を使うことになります。3. シングルトンセッションBean:シングルトンセッションBeanは、JVMごとに1つしかインスタンス化されないこと以外はステートレスセッションBeanとほぼ同様の機能を提供します。キャッシュやリソースへのアクセスビューを共有化し並列処理を行いたい場合など並行処理用のアノテーションを組み合わせて効率良くかつ安全なプログラミングが可能です。ステートレスセッションBeanと同様に、Webサービスエンドポイントを実装できます。シングルトンセッションBeanではクライアントの呼出し間でその状態を保持しますが、サーバーのクラッシュまたは停止時にはその状態を保持しません。ステートレスセッションBeanを作成する ファイルタイプを選択のところで、プロジェクト名を指定して、[Enterprise JavaBeans] -> [セッションBean]を選択します。 (クラスの名前)EJB名の指定、セッションのタイプを選択します。EJB3.0では、最低1つのローカルあるいはリモートインタフェースを書く必要がありましたが、EJB3.1では、インタフェース無しの実装も可能になりました。リモートアクセスをさせる場合はインタフェースが必要です。 NetBeansでは編集フィールドで右クリックしてメニューからビジネスメソッドを定義できます。インタフェース(ローカルインタフェース、リモートインタフェース)のメソッド宣言も同期を取ってくれますので実装抜け無くなります。セッションBeanのライフサイクルとコールバックメソッド EJBは種類によって振る舞いが異なるのでライフサイクルも異なります。、いずれもライフサイクル自体はコンテナによって制御され、ライフサイクルコールバックを処理するメソッドを実装できます。EJBの初期化時や終了時など任意のタイミングでの処理が必要な場合は、下記のようなコールバック注釈をつけたメソッドを実装します。@PostConstruct … 依存性注入完了後に、初期化処理として呼び出される@PreDestroy … インスタンス破棄する直前に呼び出される@PrePassivate … パッシベーション前に呼び出される (Stateful Session Beanのみ)@PostActivate … アクティベーション後に呼び出される (Stateful Session Beanのみ)WebLoic Serverのチューニング WebLogic Serverは、EJBコンテナに対してアプリケーション環境に合わせたチューニングパラメータを提供しています。weblogic-ejb-jar.xmlファイルに設定することができます。1) max-beans-in-free-pool: ステートレスセッションBeanのプールの最大サイズ2) initial-beans-in-free-pool: WebLogic Server起動時に作成されるステートレスセッションBeanのプールサイズ。設定は initial = max を推奨、maxの値は、 そのEJBへの最大同時アクセス数が目安 ( < 実行スレッド数)3) max-beans-in-cache: ステートフルセッションBeanのキャッシュサイズビジネスインタフェース Beanクラスのメソッドはビジネスインタフェースを通して公開可能です。EJBクライアントとコンポーネントの結合度を疎に保つためにインタフェースを定義し使用します。クライアントのアクセスモデル(同じJVMであればローカル、異なるJVMはリモート)を注釈で指定します。ローカルアクセスは@Local、リモートアクセスは@Remoteです。Java EE 5のDIを使用したEJBの呼び出し EJBの呼び出し方法はシンプルでクライアント側は@EJBアノテーションを書けば良く、@EJB, @RESOURCEとアノテーションが異なる点に注意が必要です(後半のJava EE 6 CDI参照)。トランザクションの管理 EJBコンテナはトランザクション管理サービスを提供しています。CMT(コンテナ管理)とBMT(Bean管理)を選択可能(@TransactionManagement)です。CMT … コンテナがトランザクションを管理 (@TransactionAttributeで振る舞いを指定)BMT … Beanがトランザクション処理 (begin/commit を記述)CMTのトランザクション属性を理解して要件に合ったトランザクション属性を指定する必要があります。CDIとは Contexts and Dependency Injection for Java EE(CDI 1.0)は、Java EE 6標準のDI仕様です。この仕様はアプリケーションサーバ上の実行中の処理状態(Context)に関連付けて依存性を注入(Dependency Injection)する仕組みを規定したものです。EJBコンテナが、インスタンスの生成や削除(ライフサイクル)をコンテキストに応じて管理してくれるので、利用者はCDI Beanの型を知っていれば良く、ライフサイクルを意識する必要はありません。依存性を注入する場合は、@Injectアノテーションを使用します。CDI Beanは注釈により、コンテナがインスタンス化してから破棄するまでの期間を設定することができます。@RequestScopedアノテーションは、HTTP リクエストを受けてからレスポンスを返すまでの間、@ConversationScopedは、明示的に呼び出されたConversation.begin()からConversation.end()を実行するまでの間、@SessionScopedはHTTPセッションが有効な間、@ApplicationScopedはWebアプリケーションが起動して終了するまでの間@Dependentはインジェクション先と同じライフサイクル(デフォルト)です。CDIを有効にしてCDI Beanを作って見る Java EEでCDIを使う場合の下準備として、CDI を有効化するためにbeans.xml ファイルをアプリケーションに含めなければなりません。META-INF、WEB-INF下にbeans.xmlファイルを作成します。(中身は問いません)CDI Beanの実装 @Namedアノテーションとスコープの注釈を指定します。(省略すると @Dependent と同じですが、できるだけ省略しない)Java EE 7にアップグレードした場合などを考慮すると、CDIのスコープ注釈は省略せずに書くことを推奨します。EL式からCDI Beanをアクセスする EL式の構文は#{ CDI Beanの名前.プロパティ名 }でCDI Beanを呼び出すことができます。またEJBクライアントからは、@Injectアノテーション注釈でEJBへの参照をDIすることができます。まとめ今回は、セッションBeanの種類、Beanのライフサイクル管理、トランザクション制御、依存性の注入によるコンポーネント間の連携などを取り上げました。EJB3.1の仕様EJB3.1+CDI1.0を使ったPOJO + @アノテーションのアプリケーション開発をぜひ体験してください。第2回のJSF入門、今回のEJB&CDI入門につづき次回のWebLogic Server勉強会@東京は最終回「JPA入門」です。アプリケーションがいよいよ完結します。 「第1回」 Java EE&WebLogic Server入門(5月27日)のスライド、クイックレビュー「第2回」 JSF入門(6月24日)のスライド、レポート「第3回」 EJB&CDI入門(8月27日)のスライド【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年8月27日に開催されました「第49回WebLogic Server勉強会@東京」の前半のセッション 「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の 「第3回 EJB&CDI入門」 をレポートします。講師は日本オラクル オラクルユニバーシティの岡田さんです。岡田さんが...

05. コラム - WebLogic勉強会 通信

はじめてのJava EEアプリケーション開発(第3回:EJB&CDI入門)開催!

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年8月27日に「第49回WebLogic Server勉強会@東京」が開催されます。前半のアジェンダは、「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の「第3回 EJB&CDI入門」です。EJB(Enterprise JavaBeans)はサーバサイドコンポーネントのビジネスロジックを記述するための仕様です。EJBの特長、種類、トランザクションとセキュリティ制御、依存性の注入によるコンポーネント間の連携、Beanのライフサイクル管理などを解説します。今回初めて参加される方も大歓迎です。「第1回 Java EE&WebLogic Server入門」(5月27日)、「第2回 JSF入門」(6月24日)を参考に前2回分のキャッチアップをしてご参加ください。後半のセッションは「既存JavaアプリケーションをJava EEで最新化!」です。皆様とお会いできるのを楽しみにしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「第49回WebLogic Server勉強会@東京」参加申し込み受付中2014年8月27日に「第49回WebLogic Server勉強会@東京」が開催されます。今回は下記のアジェンダで開催します。皆様のご参加をお待ちしています。「はじめてのJava EEアプリケーション開発シリーズ: 第3回EJB&CDI入門」EJB (Enterprise JavaBeans)はサーバサイドコンポーネントのビジネスロジックを記述するための仕様です。EJBの特長、種類、トランザクションとセキュリティ制御、依存性の注入によるコンポーネント間の連携、Beanのライフサイクル管理などを解説します。日本オラクル オラクルユニバーシティ 岡田 大輔「既存JavaアプリケーションをJava EEで最新化!」独自フレームワークやStrutsのようなサードパーティ・フレームワークを使用した既存JavaアプリケーションをJava EEの標準仕様ベースのアプリケーションに移行するニーズが高まっています。具体的な移行アプローチやメリットについて、これまでのJava EE移行案件の体験を含めて説明します。日本オラクル テクノロジーコンサルティング統括本部 加藤田 益嗣「お悩み相談室、Q&A」「WebLogic Serverに関する疑問、質問」に答えるセッションです。(回答者)WebLogic Server勉強会チーム東京近郊の皆様、8月27日(水) には仕事を早めに切り上げ、午後7時00分にオラクル青山センターに集合しませんか?(前回のWebLogic Server勉強会会場) 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年8月27日に「第49回WebLogic Server勉強会@東京」が開催されます。 前半のアジェンダは、「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の 「第3回 EJB&CDI入門」です。EJB(Enterprise...

05. コラム - WebLogic勉強会 通信

OutOfMemoryErrorの対応方法/Heap解析ツール(MAT)の使い方

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年6月24日に開催された「第48回WebLogic Server勉強会@東京」の後半セッションでCTCの橋本 和俊氏が発表した「OutOfMemoryErrorの対応方法/Heap解析ツール(MAT)の使い方」をレポートします。このセッションで橋本氏は度々見かける「OutOfMemoryError (OOME)」が発生する理由、原因追究方法を分かりやすく説明しました。Javaアプリケーションのトラブルシューティングや性能評価の際にGCの状況をモニタリングしながらヒープサイズを調整したり、JVMのメモリ使用推移を監視することが有効です。また、メモリリークを発見するための「Eclipse Memory Analyzer(MAT)」も役立つでしょう。JVM起動時の適切なオプション設定、GCログの採取とモニタリング、Heap Dumpの取得と分析方法などをマスターして、OutOfMemoryError (OOME)に備えましょう。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)OutOfMemoryError(OOME)とはOutOfMemoryError(OOME)はJVMがメモリ不足時に出力するエラーです。OOMEが発生した場合には、JVMは正常に動作できない可能性があります。このセッションでは、OOMEの発生原因や対処方法を習得するために、JVMのメモリ管理方法、GCログの出力設定方法、GCログの見方、OOMEの発生原因の調査方法、Heap Dump の取得方法とその分析方法などを説明します。 オラクルはHotSpot(Sun JDK)とJRockitそれぞれのJVMを提供しています。JVM毎にメモリ管理方法や起動時のオプションが異なります。今回は、HotSpot(JDK 7まで)を前提にして説明します。HotSpotは、Heap, Permanent, C Heapの3つのメモリ領域に分けてアプリケーションのメモリ管理を行っています。Heapは、JVMのオブジェクト(String等)や配列の実体が格納される領域です。JVMはこの中をYoung領域とOld領域の二つに分けて管理しています。Permanent(以下Perm)は、JVMのクラス情報などのMeta情報が格納される領域です。C Heap(Native)は、最適化されたコード/JNIなどが格納される領域です。JVMの重要な役割としてアプリケーションのメモリ管理があります。これはアプリケーションの中で使用済みで参照されないオブジェクトのメモリを開放する仕組みです。これをGarbage Collection(GC)と呼びます。GCにはYoung領域のGCとHeap全体のGCであるFull GCがあります。正常に動作している環境では、GCサイクルで不要なメモリ空間を解放するので、次にアプリケーションが必要なメモリ空間は確保できます。ところが、GCを行ってもメモリが確保できない場合が起こりえます。その際に、JVMはメモリ不足(OOME)を発生させます。OOMEはJavaのメモリ不足を示すエラーですが、領域により下記の種類があります。 OOMEの発生に備えた準備OOMEが発生した際にはJVMの動作が不安定になり,再起動しなければ解消されません。また、OOME後の動作についてはサポート対象外になります。根本的な原因が特定できない場合、たとえ再起動して動作したとしても同じことが発生する可能性があり一時的な解消でしかありません。原因を特定させるためには、OOME発生時のみのスレッドダンプだけでは不十分で、時系列で監視しているメモリ使用量の遷移、特にGC前後のメモリ使用量の増減などを分析する必要があります。WebLogic Serverの運用においてコンソールログの設定は必ず行ってください。OOMEはコンソールログにのみに出力される場合がありますので、“標準出力や標準エラー出力のロギングのリダイレクトを有効化”を使用せずに、コンソールログの出力を推奨します。 また、GCログの遷移を分析するために、次の表のようにGCログの出力用オプションを適切に設定します。7u2,6u34以降であれば、GCログのローテーション用オプションを使用することができます。 GCログでHeap使用量の推移を見るGCログに記録されるのは、日付: 起動してからの秒時間: GC/Full GC、Young領域の使用量、現在のYoung領域の最大値、Old領域の使用量、現在のOld領域の最大値、Permの使用量、現在のPermの最大値、GCにかかった時間(user/sys はCPU時間、real が実際にかかった時間)です。これをグラフで表示すると、下図のように遷移を見ることができます。 GCログ分析後の推奨アクションHeapが足りない場合:Heapが1GBぐらいの場合は単純にプログラムに対するHeapが足りない場合もあるため、まずはHeapを増やして(-Xms/-Xmx)再現するかどうかの検証をすることが有効です。Heapが大きいとHeap Dump等を解析する時に問題が顕在化し、調査が行いやすくなります。逆に大きすぎると解析しづらいので、ほどほどに…Heapを大きくするとOOMEが発生するまで時間が延びます。原因不明ならばHeapを大きくして毎日再起動等での対処もありといえばありです。(あまり推奨したくないですが。)32bit JVMを使用している場合は2GB制限を考慮し、Heap は1.5GBまでとりあえず上げてみてください。64bitならばOSの空き物理メモリ量と相談しましょう。Permが足りない場合:まずは増やしてみましょう。-XX:PermSize(初期値) と -XX:MaxPermSize(最大値)基本的に初期値=最大値に設定してください。増やしても足りない場合は読み込まれているクラス情報を確認する等の別の視点からの調査が必要です。C Heapが足りない場合:64bit JVMに変更すればとりあえず制限はほぼありません。32bit JVM の場合はHeapやPermを減らしてみるのも一つの手段です。C Heapの最大量は[プロセスの最大メモリ量] – [Heap最大量] – [Perm最大量]のため、Heap/Permを減らせば最大量は増えることになります。ただし、他のOOMEが出ないように注意してください。Heap Dumpの取得方法とMAT分析ツールOOME時にHeap Dumpを出力するオプションを使用してHeap Dumpを取得します。またスライドP.30のように動作中にHeap Dumpを取得する方法も提供されています。Eclipse Memory Analyzerをダウンロードして、Heap Dump(正常時とOOME発生時)の差分比較を行うことで、メモリリークなどの障害を見つけ出すことができます。(スライドp.31-50参照) まとめこのセッションではOutOfMemoryError (OOME)とは何か、JVM起動時の適切なオプション設定、GCログの採取とモニタリング、Heap Dumpの取得と分析方法などを説明しました。アプリケーションのデバッグ、テストの段階でGCログの遷移からJVMのメモリ使用状況をモニタリングして、メモリーリークなどの不具合の発見も可能です。JVMやWebLogic Serverの設定オプションの確認や各種のログ出力設定、内容の分析などこの機会にもう一度レビューされてはいかがでしょうか。「お悩み相談室」をご活用ください毎回、WebLogic Server勉強会では、最後に「お悩み相談室」としてOracle WebLogic Serverに関する疑問、質問に答えるセッションを行っています。普段、WebLogic Serverのアプリケーション開発、運用管理で困っていること、悩んでいることなどありましたらドシドシお寄せ下さい。回答者は、講師、Oracle ACE、エキスパートの皆様にお願いしています。他の参加者の皆様も同じ悩みをお持ちの方がいらっしゃるかもしれません。どんなことでも構いませんのでよろしくお願いします。申し込み時の「質問欄」にご記入ください。次回は8月27日に開催します(間もなく参加登録ページを公開予定です)。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年6月24日に開催された「第48回WebLogic Server勉強会@東京」の後半セッションで CTCの橋本 和俊氏が発表した「OutOfMemoryErrorの対応方法/Heap解析ツール(MAT)の使い方」をレポートします。このセッションで橋本氏は度々見かける「OutOfMemory...

05. コラム - WebLogic勉強会 通信

「JSF入門」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年6月24日に開催された「第48回WebLogic Server勉強会@東京」の「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の「第2回 JSF入門」をレポートします。JSF (JavaServer Faces)は、Webアプリケーションのユーザインタフェースを開発するための仕様です。岡田さんがWebアプリのユーザインタフェースの要件、JSFの特長と構成、画面遷移、また、JSF画面コンポーネント、入力値が適正な範囲かどうかなどをチェックするバリデーション(データ検証)機能、コンバータ(データ変換)機能などを説明しました。次回の「第3回: EJB & CDI入門」は8月27日開催の予定です。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JavaServer FacesとはJSFはJava EEの仕様の一部です。Java EEはJava SE をベースにした企業システム向けのアプリケーションを作るための仕組みです。この仕様を決めているのはオラクルだけでなく、業界の主要なベンダーが参加しているJava Community Processコミュニティで仕様を策定していて、標準仕様であることがポイントです。Java EE仕様は、JSF、Servlet、EJB、JPAなどのコンポーネント仕様とデータベースやメッセージングシステムとの連携用のサービスアクセスのための各種APIの規定です。アプリケーションサーバベンダーは、Java EEの仕様に準拠したアプリケーションサーバ(Java EEを実装した基盤)を開発し提供しています。(Oracle WebLogic Serverなど)Java EE仕様に沿って開発されているアプリケーションはどのアプリケーションサーバ上にも大きな変更を加えることなく簡単に動作させることができます。 JSFはJava EE仕様の1つです。、Webアプリケーションのユーザインタフェースを開発するためのフレームワークを規定しています。ブラウザを使用したWebアプリケーションてはHTMLなどを使用して画面表示をしています。このHTMLはJSFのコンポーネントの一つです。JSFの開発スタイルはHTMLをベースに、タグをべた打ちするのではなくGUIのパーツを組み合わせて開発するイメージです。例えば、ボタンが押された時のアクションを決める、といった具合です。標準としてお勧めのビューはFaceletでXHTMLベースでできています。JSFの構成要素JSFのメリットの一つは標準ベースのアプリケーション開発を行えることです。JSFをMVCモデル(コントローラ、ビュー、モデルから構成される)と捉えると、ビューはFacelet、モデルはPOJO/マネージドBeanで、コントローラはJSFのフレームワークとして提供されるFaces Servletです。アプリケーション開発者が開発するのはFacelet, POJO/マネージドBeanです。 JSFの構成要素:リクエストが入ってくるとFacesServletがリクエストを制御します。最終的にはマネージドBeanを呼び出し、その結果をFaceletに渡して表示します。必要に応じてコンバータを使用してデータ変換を行ったりバリデータを使用してデータの検証、文字数をチェックします。XHTMLに表示する場合は標準のレンダラーを使用できますが、HTML以外に表示する場合は別途レンダラーを用意して利用する方法もあります。JSF 1.Xなどの古いJSF仕様ではfaces-config.xhtmlが必要でしたが2.0からは不要です(オプション)。JSFのライフサイクル①ビューの生成/復元:リクエストが入ってくるとビューの復元を実行します。ビューの復元とはリクエストに基づいてページのUIコンポーネントツリーを作成(または復元)することを示します。初期リクエスト時は作成します。2回目以降の場合は復元します。入力値の適用:送信されたフォームの値をUIコンポーネントに適用します。コンバータが文字列データをJavaデータ型に変換します。③検証処理:UIコンポーネントに関連付けられた検証(バリデータ)を行います。④モデル値の更新:入力値の適用フェーズで適用されたUIコンポーネント値をマネージドBeanにコピーします。⑤アプリケーションの呼び出し:マネージドBeanのメソッドを呼び出してビジネスロジックを実行します。⑥レスポンスのレンダリング:マネージドBeanの値を読み取り(EL式)、レスポンスを返します。実際には裏側でこの動きが起こっています。今回のサンプルではJSFライフサイクルの細かな動きを知る必要はありませんが、後半のプログラミング時にこのライフサイクルをイメージできると理解が深まります。JSFの画面遷移暗黙的なナビゲーションの指定方法は、簡単でaction="list"のようにactionで次ページの名前を指定します(.xhtmlは省略可能)。これは、ページの遷移をするだけですが、もし、何らかのアクションをしたい場合は、マネージドBeanのメソッドを指定することができます。指定されたマネージドBeanのメソッドが呼ばれ、その処理の結果(この例ではlist画面を表示)で次のアクションが決まります。 上図の中では2パターンを説明しています。index.htmlのaction="list"はlist.xhtmlへの遷移になります。action = "#productBean.navigation}"はマネージドBeanのProductBeanのnavigationメソッドに処理が移り、その中のreturn "list"でlist.xhtml画面に遷移します。マネージドBeanのスコープマネージドBeanの作成:基本はPOJO。ただし@ManagedBeanのアノテーションとスコープを指定します。@ManagedBeanを指定するとJSFのコンテナでライフサイクルが管理されます。ライフサイクルはスコープに基づき、「どの期間生存しているか」を制御します。 マネージドBeanの実装ManagedBeanの作成:今回は一覧表示をしたいので、コレクションのListを使用しています。画面遷移用のメソッドとしてtoList, toIndexメソッドを付加しています。また、ManagedBeanの初期化のためには@PostConstructメソッドを追加することもできます。 EL式の使い方FaceletからマネージドBeanにアクセスする時には、#を接頭辞に持つEL式を使用します。ルールを押さえておくことが重要です。 入力値の検証検証(バリデータ)や変換(コンバータ)はJSFライフサイクル・フェーズで呼び出されます。JSFでは標準でバリデータやコンバータを提供していますが、Converter クラスや Validator クラスの開発、および Bean Validation も使用可能です。入力必須のフィールド、入力値の範囲指定、入力値の変換、エラーメッセージの表示方法など細かな制御が可能です。 JSFのまとめJSFはJava EE 標準の仕様の1つで、アプリケーション開発者はJSF仕様に基づいたWebアプリケーションフレームワークを活用することでアプリケーションのWebユーザインタフェース部分を効率的に開発することができます。画面をコンポーネントベースで開発できることが大きな特長です。アプリケーション開発者の役割は、Faceletで画面を作成することと、ビジネスロジックであるマネージドBeanを開発することです。Faceletを記述してプレゼンテーションを記述しますが、その際に豊富なJSFタグが利用できるので簡単に最新の画面イメージを実装できます。また、テンプレート・フレームワークも活用できます。JSFでのページ遷移は、暗黙的なナビゲーションで開発をスピーディに進めることができます。actionに遷移先を文字列で指定できます (index.xhtml の場合は index )。またEL式 を使ってマネージドBean とメソッドを指定してプログラムに遷移することも可能です。データはマネージドBeanで保持されます。JSFコンテナによってインスタンスのライフサイクルが管理されます。適切なスコープを指定することでリソースを効率良く使用することが可能です。次回は「第3回 EJB & CDI入門」です。お楽しみに。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年6月24日に開催された「第48回WebLogic Server勉強会@東京」の 「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の 「第2回 JSF入門」をレポートします。JSF (JavaServer...

05. コラム - WebLogic勉強会 通信

はじめてのJava EEアプリケーション開発(第2回)開催間近

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年6月24日に「第48回WebLogic Server勉強会@東京」が開催されます。前半は「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の第2回です。5月27日に開催された「第1回 Java EE&WebLogic Server入門」はWeb アプリケーションとは何か、Javaの特長、企業向けアプリケーションのフレームワークなどのJava EE入門編、それから、環境準備としてWebLogic Serverのインストール、ドメイン作成、サーバーの起動や停止などWebLogic Server入門編を合わせて行いました。今回から、いよいよJava EEアプリケーションの開発がスタートします。JSF(JavaServer Faces)を使用して、ユーザインタフェースを開発します。前回参加できなかった方、第2回からの参加も大歓迎です。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)第1回 Java EE & Oracle WebLogic Server入門のクイックレビュー アプリケーション・サーバとは 企業向けのアプリケーションは、ユーザ数が多く大量のリクエストを迅速かつ確実に処理することが求められます。また、データベースなどのリソースを効率良く使用するなど無駄を極力排除した設計や実装が必須です。このような要件に応えるためにアプリケーションサーバが役立ちます。企業システムのオンラインアプリケーションやメッセージ交換システムは、基本的な「リクエスト処理フロー」や「メッセージの蓄積・転送方法」などアプリケーションの共通点も多くあります。このような汎用の機能をうまく仕様策定して、実装できれば、アプリケーションの開発=ビジネスロジックの開発の図式が成立します。アプリケーション・サーバの主な目的は、アプリケーション開発者からリソースアクセスやトランザクション管理などの共通処理を切り離し、ビジネスロジックの開発に注力させることです。Oracle WebLogic Serverの最新版は、Java EE 6に準拠したアプリケーションを実行するためのミドルウェアで、Java EE 仕様にもとづくアプリケーションサーバです。Java EE 6でのアプリケーション開発 Java EE 6の仕様は、JSR-000316 JavaTM Platform, Enterprise Edition 6 (Final Release)に記述されています。JSF 2.1(リッチなユーザインタフェースの効率的な開発を実現するWebアプリケーション・フレームワーク)、Servlet3.1(冗長な設定・コード記述の削減により開発生産性を向上や非同期ServletによるAjax対応)、EJB3.1(冗長な設定・コード記述の削減により開発生産性を向上、より柔軟な制御機能の追加)、JAX-RS(容易なサービス公開を実現するWebサービス標準仕様)、CDI(レイヤ間の疎結合化による柔軟性を向上するDIフレームワーク標準仕様)など。 これから作成するアプリケーション 第2回、第3回、第4回で上記のWebアプリケーションを開発します。第2回JSF (JavaServer Faces), 第3回EJB(Enterprise JavaBeans)とCDI(Context Dependency Injection)、第4回JPA(Java Persistent API)。毎回特長およびそれぞれのプログラミング方法について解説します。それぞれの仕様について初心者向けに解説します。また後日デモ環境をダウンロードすることで実際に体験することができます。WebLogic Server入門 第2回以降に実行環境として使用するWebLogic Serverの概要の説明がありました。まず、WebLogic Serverをインストールして、ドメインを作成し管理コンソールを起動してみましょう。関連マニュアル「インストール・プログラムの起動」をご参照ください。「第48回WebLogic Server勉強会@東京」参加申し込み受付中2014年6月24日に「第48回WebLogic Server勉強会@東京」が開催されます。下記のアジェンダで開催します。皆様のご参加をお待ちしています。「はじめてのJava EEアプリケーション開発シリーズ: 第2回JSF入門」JSF (JavaServer Faces)は、Webアプリケーションのユーザインタフェースを開発するための仕様です。Webアプリのユーザインタフェースの要件、JSFの特長と構 成、画面遷移を説明します。また、JSF画面コンポーネント、入力値が適正な範囲かどうかなどをチェックするバリデーション機能、Ajax対 応などを解説します。日本オラクル オラクルユニバーシティ 岡田 大輔「OutOfMemoryError の対応方法/Heap 分析ツール(MAT)の使い方」Javaアプリケーションのトラブルシューティング(特にOOME)や性能評価の際にヒープサイズを調整したり、プログラムが使用するメモリ 量を分析することが有効です。初心者向けにメモリリークを発見するための「Eclipse Memory Analyzer(MAT)」の使い方を紹介します。伊藤忠テクノソリューションズ株式会社 ソリューションビジネス部 橋本 和俊氏「お悩み相談室、Q&A」「WebLogic Serverに関する疑問、質問」に答えるセッションです。(回答者)WebLogic Server勉強会チーム【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年6月24日に「第48回WebLogic Server勉強会@東京」が開催されます。 前半は「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の第2回です。 5月27日に開催された「第1回 Java EE&WebLogic Server入門」はWeb...

05. コラム - WebLogic勉強会 通信

JavaでWebアプリケーションを開発する初心者向けシリーズを始めます。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年5月27日に「第47回WebLogic Server勉強会@東京」が開催されます。今回の初めのセッションは、「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の第1回です。Java EE 6 (Java Enterprise Edition 6)を使ったWebアプリケーションを作ってみたい方を対象に、Webアプリケーションの基本からプログラミングの実際までをステップバイステップのデモを交えて分かりやすく解説し、全体を通じて各コンポーネントの役割と開発のポイントを押さえることができるJavaエンタープライズアプリケーション入門シリーズです。ぜひ、この機会に、JavaでWebアプリケーションを開発してみませんか?(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)はじめてのJava EEアプリケーション開発シリーズ(全4回)Java EE 6 (Java Enterprise Edition 6)を使ったWebアプリケーションを作ってみたい方を対象に、Webアプリケーションの基本からプログラミングの実際までをステップバイステップのデモを交えて分かりやすく解説し、全体を通じて各コンポーネントの役割と開発のポイントを押さえることができるJavaエンタープライズアプリケーション入門シリーズを開催します。初めにJava EEやWebアプリケーションの特長、アプリケーションサーバの役割、開発環境としてのOracle WebLogic Serverの構成やアプリケーションのデプロイ方法などの基礎知識を説明します。次にJava EEの主要な仕様であるJSF (JavaServer Faces), EJB (Enterprise JavaBeans)、CDI (Context Dependency Injection)、JPA (Java Persistence API) などを取り上げ、特長、機能およびプログラミング方法を解説します。Webアプリケーションが、Java EEを使ってどのように作られるかの基本を全4回で習得、体験することができます。全4回の内訳は「第1回:Java EE & Oracle WebLogic Server入門」、「第2回 JSF入門」、「第3回:EJB&CDI入門」、「第4回:JPA入門」の予定です。第1回今回のアジェンダは次の内容です。Java EE & Oracle WebLogic Server入門 Web アプリケーションとは何か、Java, Java EEの特長、企業向けアプリケーションのフレームワークなどを解説します。また環境準備としてWebLogic Serverのインストール、ドメイン作成、サーバーの起動や停止など次回以降に使用するアプリケーションサーバ環境の準備を行います。講師:日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔Oracle WebLogic ServerからOracle DatabaseへユーザーIDを渡す方法Oracle DatabaseがAPユーザーを識別する際、CLIENT_IDが使用できます。WebLogic Serverのデータ・ソース便利機能、 「接続時にクライアントIDを設定」の使い方を紹介します。この機能は意外に知られていないので、ぜひこの機会にマスターしてください。講師:日本オラクル テクノロジー製品事業統括本部 福田 知彦お悩み相談室、Q&AOracle WebLogic Serverに関する疑問、質問に答えるセッションです。回答者:WebLogic Server勉強会チーム【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年5月27日に「第47回WebLogic Server勉強会@東京」が開催されます。 今回の初めのセッションは、「はじめてのJava EEアプリケーション開発シリーズ」(全4回)の第1回です。Java EE 6 (Java Enterprise Edition...

05. コラム - WebLogic勉強会 通信

「第46回WebLogic Server勉強会@東京: 祝5周年記念!」参加受付中

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年4月22日に「第46回WebLogic Server勉強会@東京」が開催されます。おかげ様でWebLogic Server勉強会は、2009年4月の第1回開催から丸5年経ち、今回から6年目に突入します。今回は「WebLogic Serverと愉快な仲間たち」をテーマに5周年記念特別版を企画しました。W-1選手権(WebLogic Serverクイズ王決定戦)の初代チャンピオン山本裕介氏による「Javaプロフェッショナルへの道」特別講演、「山田貴裕×岡田大輔がWebLogic Serverを語る」パネルディスカッション、そして参加者同士の情報交換会の構成です。これからJavaを学ぼうという方、WebLogic Serverでアプリ構築される方、ぜひご参加ください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)概要今回は「WebLogic Serverと愉快な仲間たち」をテーマに5周年記念特別版を企画しました。W-1選手権(WebLogic Serverクイズ王決定戦)の初代チャンピオン山本裕介氏による「Javaプロフェッショナルへの道」特別講演、「山田貴裕×岡田大輔がWebLogic Serverを語る」パネルディスカッション、そして参加者同士の情報交換会の構成です。これからJavaを学ぼうという方、WebLogic Serverでアプリ構築される方、ぜひご参加ください。「Javaプロフェッショナルへの道」特別講演W-1選手権の初代チャンピオンがJava、WebLogic Serverに関する体験談やスキルアップの方法、それから将来の夢などを語ります。Java, Java EE、WebLogic Server初心者の皆様、刺激的かつ有益な情報が得られること必至。これからJavaを学ぼうという方、WebLogic Serverでアプリ構築される方、ぜひご参加ください。「山田貴裕×岡田大輔がWebLogic Serverを語る」WebLogic Server勉強会の講師陣の2名がパネルディスカッション形式でWebLogic Serverに関するディープなTips、体験談を語ります。会場からの質問も受け付けます。WebLogic Serverの疑問や困っていることを解決する絶好の機会。「WebLogic Serverでつながろう!」参加者同士のネットワーキングを広めるための情報交換会です(ドリンク&スナックあり)。「WebLogic Server」で顔見知りになり、お互いがスキルアップする絶好のチャンスです。Facebookの「やっぱりWebLogic!」メンバーの愉快な仲間が盛り上げ役を担当します。初参加の方大歓迎です。5月からの「初心者向けのJavaエンタープライズアプリケーション構築」シリーズのキックオフを兼ねて、これからJavaで企業向けアプリケーション開発・運用を担当される方、最新技術に興味を持っている方、とりあえず当日他の予定が無い方などなど皆様のお越しをお待ちしています。東京近郊の皆様、4月22日(火) には仕事を早めに切り上げ、午後6時30分にオラクル青山センターに集合しませんか?【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年4月22日に「第46回WebLogic Server勉強会@東京」が開催されます。 おかげ様でWebLogic Server勉強会は、2009年4月の第1回開催から丸5年経ち、 今回から6年目に突入します。今回は「WebLogic...

05. コラム - WebLogic勉強会 通信

「WebLogic Server セキュリティ」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年3月25日に東京で開催された「第45回WebLogic Server勉強会@東京」の「WebLogic Server セキュリティ」(講師:日本オラクル オラクルユニバーシティ 岡田 大輔)をレポートします。岡田さんはWebLogic Serverで使用されているセキュリティ・フレームワークの概要からセキュリティ・レルムの構成方法、ユーザの変更管理などのWebLogic Serverセキュリティの基本を中心に説明しました。ぜひ、この機会にWebLogic Serverのセキュリティの考え方、設定のポイントなどマスターしてください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)はじめに「WebLogic Serverセキュリティ」(講師:日本オラクル オラクルユニバーシティ 岡田 大輔)セッションをレポートします。1).Java EEセキュリティ、宣言的セキュリティの考え方2).セキュリティ・レルムとは何か、その構成要素3).セキュリティ・プロバイダ概要、認証プロバイダの設定例4).管理コンソールのアクセス制御、デフォルト・グローバル・ロールの定義やユーザ管理の注意点Java EEセキュリティ、宣言的セキュリティの考え方WebLogic Serverのセキュリティ機能はWebLogic Server上のリソースを統一的に保護する目的で標準技術に準拠した宣言的セキュリティを使用して実装されています。ユーザ、グループとセキュリティ・ロール、セキュリティ・ポリシー、リソースの関係を設定します。セキュリティ・ポリシーはアクセス制御リスト(ACL)にかわるもので、「誰がWebLogicリソースにアクセスできるか」という問いに答えるものです。セキュリティ・ポリシーは、WebLogic Serverリソースと、1つまたは複数のユーザー、グループ、またはセキュリティ・ロールとの間に関連付けを定義するときに作成されます。リソースはWebアプリケーションの場合はURLで、EJBの場合はメソッド単位になります。宣言的セキュリティにより、アプリケーション開発者と管理者の役割分担が明確になります。開発者はリソース毎に、注釈(アノテーション)やデプロイメント記述子を使用してアクセスポリシーを宣言します。また、アプリケーションで使用するセキュリティロールを宣言します。一方、管理者は開発者が設定したJava EE宣言的セキュリティが機能するようにWebLogic Serverドメインのセキュリティ設定を行います。 WebLogic Serverのセキュリティフレームワークは、サードパーティのセキュリティプロバイダーソリューションを連携するためにSecurity Provider Interface (SSPI)をサポートしています。アプリケーション開発者は、JAASを活用することで低レベルのセキュリティ関連インタフェースを意識する必要はありません。 この図はクライアントがログインリクエストを出し、次にリソースへのアクセスリクエストを送った時の内部の動きを説明しています。まず、WebLogic Serverのセキュリティフレームワークはログインモジュールを呼び出し、ユーザの認証を行います。次にセキュリティロールを介してリクエストされたリソースへのアクセス認可を判断します。開発者はJava EEに沿った開発を行い、管理者はセキュリティプロバイダを適切に設定しなけれはなりません。セキュリティ・レルムとは何か、その構成要素セキュリティ・レルムはWebLogic Serverリソースを保護する仕組みです。セキュリティ・レルムは、WebLogicリソースを保護する複数のメカニズムで構成されています。各セキュリティ・レルムは、構成済みのセキュリティ・プロバイダ、ユーザー、グループ、セキュリティ・ロール、およびセキュリティ・ポリシーで構成されます。ユーザーはセキュリティ・レルムで定義されていないと、そのセキュリティ・レルムに属するWebLogicリソースにアクセスできません。ユーザーが特定のWebLogicリソースにアクセスしようとした場合、WebLogic Serverは、関連するセキュリティ・レルムでそのユーザーに割り当てられているセキュリティ・ロールと、その特定のWebLogicリソースのセキュリティ・ポリシーをチェックして、ユーザを認証および認可します。 各種のリソースにアクセスできるのはセキュリティ・レルム内のユーザのみです。一部のセキュリティ・プロバイダはセキュリティ・サービスを提供するためのデータを格納するストアとしてセキュリティ・プロバイダデータベースを使用します。この中には、ユーザ,グループ(認証プロバイダ)、セキュリティ・ポリシー(認可プロバイダ)、セキュリティ・ロール(ロール・マッピング・プロバイダ)、資格証明(資格マッピングプロバイダ)などが格納されます。セキュリティ・プロバイダデータベースには、デフォルトの組み込みLDAPサーバとドメイン作成時(または作成後)に指定可能なRDBMSセキュリティ・ストアがあります。WebLogic Serverで標準実装として提供されるデフォルトのセキュリティ・プロバイダ実装はmyrealmです。レルムは複数定義可能ですがアクティブにできるレルムは一つだけなので、必要に応じてmyrealmのセキュリティ・プロバイダ定義をカスタマイズします。セキュリティ・プロバイダ概要、認証プロバイダの設定例 セキュリティ・レルムを構成するセキュリティ・プロバイダは任意で追加・削除可能です。また、認証プロバイダを追加すると組み込みLDAP以外のデータ・ストアに格納されたユーザでも認証できます。例えば、管理ユーザ向けには組み込みLDAP(DefaultAuthenticator)を使用して、一般ユーザ向けに外部データ・ストア(追加認証プロバイダ)を使用する方法です。複数の認証プロバイダを設定する場合は、認証順と制御フラグの設定に注意する必要があります。管理コンソールのアクセス制御、デフォルト・グローバル・ロールの定義やユーザ管理の注意点 WebLogic Sreverの管理コンソールはWebアプリケーションとして実装されています。宣言的セキュリティが使われており、デフォルト・グローバル・ロールにより各リソースへのアクセス可否が決まります。まとめWebLogic Serverのセキュリティをマスターするためには、Java EEの宣言的セキュリティの仕組みを理解してアプリケーション開発者と管理者それぞれの役割を果たすことが重要になります。ぜひ、「WebLogic Server セキュリティ」資料をレビューしてください。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年3月25日に東京で開催された「第45回WebLogic Server勉強会@東京」の「WebLogic Server セキュリティ」(講師:日本オラクル オラクルユニバーシティ 岡田 大輔)をレポートします。岡田さんはWebLogic Serverで使用されているセキュリティ・フレームワ...

05. コラム - WebLogic勉強会 通信

Windows Azure上のWebLogic Server を使って遊んでみよう!

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」のLightning Talksセッション:「Windows Azure上のWebLogic Server を使って遊んでみよう!」(Japan Windows Azure Users Groupコアメンバー 勇 大地 氏講演)のレポートです。勇氏は、Windows Azure上のWebLogic Serverを使うメリットを①ライセンスの管理が簡単に!②作成した環境の横展開が簡単!③セキュアな利用が可能!の3つに分けて説明しました。これまでのクラウドのメリットに加えてセキュアな専用線サービスの提供と日本のデータセンター開設による安全性向上がクラウド活用の追い風になるだろうとのことです。クラウド活用を検討されている方は勇 氏の資料をご参考にしてください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)Windows Azure上でOracle製品の利用可能&日本データセンターが稼働開始勇 大地 氏は、Japan Windows Azure User Groupのコアメンバとして活躍されている方で、Microsoft MVP for Windows Azureの表彰を受けられ、また、「Windows Azure テクニカルハンドブック」を執筆されていらっしゃいます。今回は、WebLogic ServerをWinodws Azure上で動かすデモやメリット、注意点などを紹介していただきました。Windows Azure以外のクラウド環境でも参考になる情報が多いと思います。勇 氏は、Windows Azure上のWebLogic Server を使うメリットを①ライセンスの管理が簡単に!②作成した環境の横展開が簡単!③セキュアな利用が可能!の3つに分けて説明しました。 Windows Azure上でOracle製品の利用が可能になりました。ご講演いただいた2月26日は、偶然ですが、Windows Azure日本データセンター(「東日本リージョン」と「西日本リージョン」の2カ所)が稼働開始になった日でした。データの国外持ち出し懸念などで国内データセンター開設をお待ちになっていたお客様には朗報です。ライセンスの管理が簡単に! テストを行う際にいろいろな製品を組み合わせた環境構築のために、テスト期間限定でソフトウェアライセンスが必要になったプロジェクト経験者がいると思います。そのような場合は、クラウドを使用することをお勧めします。クラウドでは時間単位でコンピュータリソースを使用できるので、例えば1か月のテスト期間だけ使用する期間限定には持って来い、しかも持ち込み分と組み合わせも可能です。作成した環境の横展開が簡単! SIにとって、ソフトウェア生産性の向上のために一度マスターを構築して、それを横展開する方法が一般的です。開発時に作成したクラウド上のイメージファイルVHDファイルをオンプレミス環境にダウンロードして再利用したり、Windows Azureのインスタンスを増やして稼働するなどの選択が可能です。セキュアな利用が可能 クラウド環境の利用を検討しているユーザの中にはインターネット上への公開についてはより慎重になる人が多いのですが、プライベート接続サービスのExpressRouteがリリースされたこと、日本データセンターの運用が開始されたことにより、これまで以上に安全性をアピールできるようになっています。まとめ①Windows Azure と Oracle 製品は相性が良い、運用だけでなく開発もクラウドのメリットは大きいこと。②Windows Azure 上の仮想マシンで環境の構築・横展開が非常に容易、開発と環境の横展開がしやすいのでソフトウェア開発生産性の向上や環境構築の工数削減に貢献できること。③Windows Azure の日本データセンタ/ExpressRoute でセキュアな運用が可能クラウドでも日本データセンター、セキュアな専用線サービスの活用によりセキュアがサービスを提供可能であること。これまでのクラウドのメリットに加えて、セキュアな専用線サービスの提供と日本のデータセンター開設による安全性向上により、WebLogic Serverアプリケーション開発や運用も今後クラウド活用のシーンが増えて来ることが予想されます。クラウド活用を検討されている方は勇 氏の資料をご参考にチャレンジしてください。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」のLightning Talksセッション:「Windows Azure上のWebLogic Server を使って遊んでみよう!」(Japan Windows Azure Users...

05. コラム - WebLogic勉強会 通信

XAER_NOTA : The XID is not validエラーの対処法

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」のLightning Talksセッション:「XAER_NOTA : The XID is not validエラーの対処法」(伊藤忠テクノソリューションズ株式会社ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕 氏講演)のレポートです。「XAER_NOTA : The XID is not valid」は、WebLogic Serverのトランザクションマネージャ(TM)からリソースマネージャ(RM)へのリクエストに対してRMが返すエラーの一つで、何らかの原因でRM上に指定されたトランザクションID(XID)が存在しないことを示しています。このエラーが発生する代表的なシナリオを山田氏が解説しました。この機会に、XAインタフェース、XAResourceインタフェース、UserTransactionインタフェースを復習しましょう。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)XAインタフェース、XAResourceインタフェースとはX/Open (現The Open Group)XAインタフェースは、X/Open CAE Specificationの「Distributed Transaction Processing:The XA Specification」に記述されているようにX/Open Distributed Transaction Processing (DTP) モデルの中のTransaction ManagerとResource Manager間の双方向インタフェース規約であり、一般的なAPI(Application Programming Interface)ではありません。XAResourceインタフェースはJava Platform SE 7に規定されています。これは上記のX/Open DTPのXAインタフェースのJava実装です。つまり、XAResourceインタフェースはJavaでTMとRM間のインタフェースを実装する場合必要になります。分散トランザクションやXAインタフェースについては、前回の「WebLogic Server Transaction Basics」レポートをご覧ください。XAER_NOTA : The XID is not validエラー山田氏は、XAER_NOTA : The XID is not validエラーの例を示しました。 上記は、start()時のXAER_NOTAエラー発生例です。Oracle Databaseなど一部のリソース マネージャは内部タイムアウトメカニズムを備えており、タイムアウト期限が切れるとトランザクションブランチに関係する処理を内部的にロールバックします。その後、WebLogic トランザクションマネージャがリソースに対してXAResource.start/prepare/rollback 処理を呼び出すと、指定したXidがリソースマネージャ内に存在しないため、XAException XAER_NOTA が発生します。XAResourceインタフェース仕様に従えば、XAExceptions値としてXAER_NOTAを返すメソッドは、commit()、end()、forget()、prepare()、start()があります。(ただし、XAインタフェース仕様ではxa_rollback()もXAER_NOTAを返すという記載あり)JTAトランザクション関連のタイムアウトWebLogic Serverでは、トランザクションタイムアウトは管理コンソールからドメイン単位(12.1.2からはクラスタ単位も可能)で設定することができます。タイムアウト:MBean 属性: TimeoutSecondsデフォルト: 30秒トランザクションの開始から、トランザクションの最初のフェーズの終わりまでの処理にかかる最大時間です。JTAのAPI(javax.transaction.UserTransaction#setTransactionTimeoutメソッド)を使用してデフォルト値から変更できます。完了タイムアウト:MBean属性: CompletionTimeoutSecondsデフォルト:0 (10.3.4以降はデフォルトのTimeoutSecondsX2=60秒、最大120秒)トランザクションの第2フェーズの処理にかかる最大時間です。completion-timeout-secondsの値が、abandon-timeout-secondsに設定された値を超えると、abandon-timeout-secondsは、completion-timeout-secondsの値をオーバーライドします。破棄タイムアウト:JTA MBean属性. AbandonTimeoutSecondsデフォルト: 86400秒破棄タイムアウトは2フェーズコミットの第2フェーズでトランザクションマネージャがトランザクション完了まで処理を再試行する最長時間(秒数)です。第1フェーズが完了した場合、トランザクションマネージャは、すべてのリソースマネージャがトランザクション完了を示すまでトランザクションを完了しようとします。トランザクション破棄タイムアウトの時間を過ぎると、トランザクションを解決するための処理はこれ以上行われなくなります。 上図のエラーの原因は、prepare()メソッドでXidを呼び出したにもかかわらず、RM側に指定したXidが存在しないケースです。この場合の可能性としては、RM側でタイムアウトが発生したたためにトランザクションを内部的にロールバックしたことが考えられます。RM側のトランザクション関連のタイムアウト Oracle XA Driverのタイムアウトoracle.jdbc.xa.OracleXAResourceクラスの仕様は、Oracle JDBC API Reference 11g Release 2 ("11.2.0.3.0")のマニュアルoracle.jdbc.xa.OracleXAResourceに記述されています。この中で、Oracle Databaseのトランザクションタイムアウト関連のフィールドとメソッドが定義されています。トランザクションタイムアウト値はDEFAULT_XA_TIMEOUTフィールドに定義されます。デフォルトは60秒です。またトランザクションタイムアウト値を変更するためにsetTransactionTimeout()メソッドがあり、引数に指定された秒数に現在のトランザクションタイムアウト値を変更します(0を指定するとDEFAULT_XA_TIMEOUTに設定されます)。Oracle DatabaseのグローバルトランザクションロックタイムアウトOracle Databaseは、グローバルトランザクションを使用している場合に、デッドロックやロックされているリソースを待機する時間(秒)をDISTRIBUTED_LOCK_TIMEOUTで指定できます。タイムアウトが発生すると「ORA-02049: タイムアウト: 分散トランザクションがロックを待機しています。」エラーメッセージをユーザに返します。まとめ山田氏は、グローバルトランザクション処理の中でJTAトランザクション、XAトランザクション、データベース側タイムアウトの設定値がそれぞれどのように関連しているか、エラー例から改善案を提示しました。グローバルトランザクションを制御するTMの視点では、「RMがタイムアウトによりトランザクションブランチを独自にロールバックする判断を行うこと」は好ましくありません。しかし、データベース側のタイムアウト時間を延ばすことで、デッドロックやリソースへのロックを必要以上に待ち続けるような設定も望ましくありません。デフォルトの値で問題が多発するようなケースは不安定なネットワークやシステム環境、不適切なトランザクション境界の設定などアプリケーションの不具合が起因になっている場合があります。タイムアウトが発生する根本原因を十分に調査した上でTM側、RM側それぞれに適切なタイムアウト値を設定することが必要になってくるでしょう。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」のLightning Talksセッション:「XAER_NOTA : The XID is not validエラーの対処法」(伊藤忠テクノソリューションズ株式会社ソフトウェアサービス本部...

05. コラム - WebLogic勉強会 通信

「WebLogic Server Transaction Basics」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」の「WebLogic Server Transaction Basics」(講師:日本オラクル オラクルユニバーシティ 岡田 大輔)をレポートします。このセッションでは、岡田さんが分散トランザクションの基本概念からWebLogic Serverでのトランザクション設定やモニタ方法、トランザクション回復サービスなどの障害発生時の対応のポイントを解説しました。トランザクションサービスやTLOGの役割、タイムアウトやTLOGの設定方法、リカバリ手順など現場で役立つ情報満載です。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)トランザクションとは日本オラクル オラクルユニバーシティの岡田さんが分散トランザクションの基本概念からWebLogic Serverでのトランザクション設定やモニタ方法、トランザクション回復サービスなどの障害発生時の対応のポイントを解説しました。トランザクションは、大まかに言うと一連の処理をまとめて一つの処理として取り扱うことであり、厳密には、ACID特性をすべて満たさなければなりません。つまり、①Atomicity(原子性) – 処理は成功か失敗のいずれか、②Consistency(一貫性) – 処理前後ではデータの一貫性が保たれる、③Isolation(独立性) – 同時に実行される複数の処理は互いに干渉しない、④Durability(永続性) – 確定したトランザクションの結果は確実に永続化されることです。実際の業務の流れをITシステム化する場合にトランザクションの考え方を使用するとシンプルでかつ信頼性の高いアプリケーション開発が可能です。WebLogic Serverでは、フラット・トランザクション・モデルが実装されています。ネスト・トランザクションはサポートされていません。X/Open DTPモデル(現The Open Group DTPモデル) X/Open DTPモデル(The Open Group DTPモデル)は、アプリケーション(AP)とトランザクションマネージャ(TM)、リソースマネージャ(RM)の関係を示しています。トランザクションマネージャ(TM)は、アプリケーションに代わってグローバルトランザクションの管理を行うサーバソフトウェアコンポーネントで、アプリケーションからのグローバルトランザクションの開始/終了要求に基づいて、そのトランザクションに関与する全てのリソースマネージャと2フェーズコミット(2PC)に基づいた通信を行いトランザクションを制御します。リソースマネージャ(RM)は、データやプロセスへのアクセスを提供するインタフェースおよび関連ソフトウェアであり、トランザクション処理機能と永続化機構を持ちます。DTPモデルでは、アプリケーションからトランザクションを制御する場合はJTA (Java Transaction API)を使用すること、データベース上のデータへのアクセスはSQLを使用、TMとRM間はXAインタフェースで制御されることが規定されています。WebLogic Serverのアプリケーションは、WebクライアントからのメッセージをJavaのオブジェクト間で連携しながら必要に応じてデータベースやメッセージキューにアクセスするのが典型パターンです。DTPモデルに沿ったアプリケーションはJTAを使用してトランザクションの開始、コミット、ロールバックの制御をおこなうこと以外、トランザクションに関する細かな制御ロジックは必要ないのでアプリケーション開発者はビジネスロジックの実装に専念することができます。2フェーズコミット(2 Phase Commit)TMがJMSやXA DataSourceなどトランザクションに関与する複数のRMを調整して、トランザクションの制御を行うトランザクションをグローバルトランザクション(分散トランザクション)と言い、トランザクション制御はトランザクションマネージャにより行われます。例えば、①単一トランザクションでDB, JMSにアクセスする場合、②単一トランザクションで2つ以上のDBにアクセスする場合、③トランザクションがEJBコンテナによって開始された場合(EJBコンテナはサーバ上のTMを利用)などです。これらのトランザクションは、アプリケーションがcommitを発行した後でTMとRM間で2 Phase Commitプロトコルが行われます。2PCプロトコルは複数のRMをまたぐ単一トランザクションを調整する方法です。PrepareフェーズとCommitフェーズと呼ばれる2つのフェーズを用いてトランザクションをコミットします。Prepareフェーズ(フェーズ1)は、グローバルトランザクションに参加しているリソースがトランザクションブランチを処理する準備を行うフェーズです。すべてのRMから準備OKの応答があれば、TLOGに書き込み、フェーズ2に進みます。Commitフェーズ(フェーズ2)は、グローバルトランザクションに参加しているリソースが実際にトランザクションブランチを処理するフェーズです。すべてのRMから処理OKの応答があれば、アプリケーションにCommitが成功したという応答を返します。 WebLogic Serverでのトランザクション処理を解説トランザクションを開始するアプリケションは初めにJNDIを使用してUserTransactionオブジェクトの参照(ut)を取得します。それから、トランザクション境界をut.begin()とut.commit()で囲みます。そのトランザクションを識別するためにXIDが割り当てられます。トランザクション境界内で例外が発生した場合は、そのトランザクションを明示的にロールバック(ut.rollback())するようにプログラミングします。この例では、トランザクション境界の中に挿入されたメソッドは、コンテナ管理のトランザクションであるEJB(CMT)を呼び出しています。EJBコンテナは@TransactionAttributeを使用してトランザクション属性を制御します。ejb1.callA()はREQUIRED, ejb2.callB()はSUPPORTSが指定されています。このオプションではクライアント側で開始したトランザクションが引き継がれますので、それぞれのEJB内のejb1.callA(),ejb2.callB()メソッドからRMにアクセスされる処理はトランザクションに含まれます。アプリケーションのut.commit()呼び出し時にトランザクションマネージャ(WebLogic Server)はデータベース1とデータベース2に対して2 Phase Commitを用いてコミット処理を行います。 Logging Last Resource (LLR)グローバルトランザクションに参加できるRMはXAインタフェースを実装していることが条件になりますが、WebLogic ServerはXAインタフェースに準拠していないRMも一つに限り参加できる仕組みを提供しています。この機能をロギング・ラスト・リソース(LLR)最適化と言います。このLLR最適化機能は、1つの非XAリソースが、XAと同様なレベルのACID保証を伴ってグローバル・トランザクションに参加できるようにするオプションです。このLLRの仕組みは、WebLogic Serverトランザクション・マネージャが、トランザクションの他のすべてのリソースを準備し、その後、LLRリソースのローカル・トランザクションの結果に基づいて、グローバル・トランザクションに対するコミットの決定を行うことです。WebLogic Serverトランザクション・マネージャは次の基本的な手順に従います。① アプリケーションがcommitを呼び出す。 ② 他のすべての(XA対応の)トランザクション参加リソースに対してprepareを呼び出す。③ LLR参加リソースの表へコミット・レコードを挿入する。④ LLR参加リソースのローカル・トランザクション(トランザクション・コミット・レコードの挿入とアプリケーションのSQL処理の双方を含む)をコミットします。⑤ その他すべてのトランザクション参加リソースに対してcommitを呼び出します。 WebLogic Serverのトランザクション運用管理のポイント1. トランザクションサービスはWebLogic Server起動時に開始されます。トランザクションサービスのパラメータはドメイン単位(12.1.1はクラスタ単位でも可能、クラスタのJTA設定はドメインのJTA設定よりも優先される)で有効になります。(トランザクションタイムアウト、完了タイムアウトなど)2. トランザクションタイムアウト(デフォルト 30秒)トランザクション開始からフェーズ1完了までの持続時間。この時間を超えるとトランザクションはタイムアウトし、ロールバックされます。3.完了タイムアウト: フェーズ2のタイムアウト[10.3.3.0~]トランザクションのフェーズ2のタイムアウト時間。デフォルト(0)はtransaction-timeout x 2(秒)4. トランザクションログ未完了のトランザクション情報を格納するログ。トランザクションログはバイナリ形式のため、直接見ることはできません。トランザクションログはサーバのデフォルト永続ストアに格納されます。(デフォルト永続ストア: $DOMAIN/servers//data/store/default/_WLS_ 000000.DAT)WebLogic Server 12cではJDBCストアを使用可能(この場合アプリケーションデータ, JMS, TLOGをDBに一括格納可能)5. トランザクションのモニタはサーバ・レベルで行います。①トランザクション統計(JTARuntimeMBean/JTATransactionStatisticsRuntimeMBean)、②トランザクションログストア統計(TransacitonLogStoreRuntimeMBean)、③XA (TransactionResourceRuntimeMBean)、④非XAリソース (NonXAResourceRuntimeMBean)、⑤回復サービス(RecoveryRuntimeMBean)、⑥現在のトランザクション (JTARuntimeMBeanのJTATransactions属性)など。6. 障害回復トランザクションがらみの障害発生時はデータの不整合が生じる可能性があるので注意が必要です。WebLogic Serverはトランザクションリカバリサービス(TLOGを解析して未完了のトランザクションの解決を行い、2PC処理を完了させる)を提供しており、サーバ起動時に自動的に実行されます。その際にTLOGとRM状態の相違、RMからエラーが返ってきた場合などはログに記録されます。管理者はログの内容やアプリケーション側のトランザクションの状況を分析して、必要に応じて手動で解決しなければなりません。不幸にして一部コミット、一部ロールバックの不整合が発生した場合はどちらかを戻すような処理(通常はCompensationTransaction 補正処理)が必要になります。まとめ岡田さんの「WebLogic Server Transaction Basics」セッションについてまとめて見ました。WebLogic Serverのトランザクションマネージャに相当する機能は、トランザクションサービス(トランザクションリカバリーサービス含む)としてWebLogic Server起動時に開始されます。トランザクションタイムアウトなどのパラメータはドメイン単位(クラスタも可能)で設定できますので、アプリケーション環境に適切な値を設定してください。それから、グローバルトランザクションではTLOGが重要になります。WebLogic Server 12cからJDBC上に配置できるようになりましたので、サーバ障害時のフェイルオーバーの手順中のTLOG複製はJDBCの切り替えなどの対応も検討できるでしょう。次回は、LTセッションをレポートしたいと思います。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年2月26日に東京で開催された「第44回WebLogic Server勉強会@東京」の「WebLogic Server Transaction Basics」(講師:日本オラクル...

05. コラム - WebLogic勉強会 通信

「解説!JDBCデータソースと接続プール」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年2月12日に大阪で開催された「WebLogic Server勉強会@大阪 第119回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第2弾 解説!JDBCデータソースと接続プール」(講師:日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男)をレポートします(資料)。データソースはこれまでのWebLogic Server勉強会でも度々取り上げて来たトピックスです。初めに復習を兼ねてQuizを2問出題しますのでぜひトライしてください。今回はWebLogic Server 12.1.2の新機能などを中心に説明します。WebLogic Serverとデータベース連携の仕組みを理解することはアプリケーションの運用管理を行う上で非常に重要です。この機会にマスターしてぜひ現場で実践してください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JDBCデータソースと接続プールの基本をマスターしよう!WebLogic Serverが提供する機能の中でもJDBCデータソースは性能や信頼性の面で重要な機能の一つです。JDBCデータソースの役割は、データベースをアクセスするアプリケーションプログラムをできるだけシンプルに開発できるようにすること、高性能で高信頼性のアプリケーションを提供するためにデータベースへの接続や切断のオーバーヘッドを削減したり、接続のテストや切れた時のリカバリー対応を行うことなどです。アプリケーション開発の視点では、JNDIでデータソースをルックアップし、次にgetConnection()を呼び出すことで、データソースからデータベース接続を取得します。接続の使用が終わったら、アプリケーションはできるだけ早くconnection.close()を呼び出して、データベース接続をプールに戻し、他のアプリケーションが使用できるようにする必要があります。また、管理コンソールやMBeanを活用したWLSTを用いてデータソースや接続プールを監視・管理することでWebLogic Serverとデータベースの動作状況を把握したり制御することができます。 データソース復習Quiz1 解答:3間違っているのは、「3. データベース接続はコンフィグレーションウィザード実行時に作成される。」です。データベース接続は、データソース・インスタンスの作成、つまりデータソースを作成しターゲットを指定しアクティブ化する時か、サーバー起動時に作成されます。またデータベースを起動する前にWebLogic Serverを起動した場合はデータベース接続の初期化に失敗しますが、アプリケーションは起動されます。データソース復習Quiz2 解答:2正しいものは、「2:データベース接続をプールに戻す。データベース側では接続可能数は変わらない。」です。データベース接続プールの機能によりクローズされた接続はプールに戻され、他のアプリケーションが使用できます。データベース側では接続可能数は変わりません。過去の「データソース特集」情報上の2問にいまひとつ納得感が持てない方がいらっしゃいましたら、WebLogic Server勉強会で過去に取り上げた「データソース特集」セッションの資料やレポートをご参考にしてください。WebLogic Serverとデータベース接続の基礎から応用クイズで確認!WebLogic Serverのデータソース徹底活用WebLogic Server 12.1.2新機能:Application ContinuityとはApplication Continuityは、データベース障害時にアプリケーションのデータベース処理のフェイルオーバー(Replay)を透過的に実行する機能です。これは、Oracle Database12cとOracle JDBC Driver 12cにより提供される機能で、JDBCを使用するアプリケーションやWebLogic Server 12.1.2上で動作するアプリケーションに適用できます。アプリケーションがデータベースに対して処理を実行している最中にデータベースに障害が発生した場合でも、その復旧後や、RACであれば残存インスタンスにフェイルオーバーして処理を継続することができます。特にアプリケーション側で特別なコードを記述する必要はないため、既存のアプリケーションのデータベース処理の可用性を容易に向上することができます。 データソースの接続プール属性(接続テスト・オプション)を学ぶWebLogic Serverは、データソース内のデータベース接続が常に正常であるように、接続を定期的にテストする機能を提供しています。データベースやネットワークが不安定な環境ではWebLogic Server 12.1.2から登場した「接続プールの接続再作成失敗時に対応した制御機能」(フラッシュされるまでのテストの失敗数、無効化されるまでリフレッシュに失敗した接続の数)を適切に使用することが有効な場合があります。管理コンソールまたはWLSTでアクセス可能なJDBCConnectionPoolParamsBeanオプションの中で主要な属性を説明します。テスト頻度—(JDBCConnectionPoolParamsBean内のTestFrequencySeconds): WebLogic Serverが未使用の接続に対してテスト接続を試みる間隔(秒数)を指定する。テストが失敗した場合は一旦クローズして物理接続を再確立するために再オープンする。予約時に接続をテスト—(JDBCConnectionPoolParamsBean内のTestConnectionsOnReserve): このオプションが有効な場合は要求元からの接続リクエストに対して接続を渡す前にWebLogic Serverが接続テストを行う。リクエストへの応答が若干遅れるが、要求元に返す接続は正常であることが保証される。テスト対象の表名—(JDBCConnectionPoolParamsBean内のTestTableName): 接続テストで使用する表名の指定に使用する。また、SQLと入力してスペースを1つ続け、テストとして実行するSQLコードを入力することによって、標準テストのかわりに実行するSQLコードを指定することもできる。アイドル・プール接続を信頼する秒数—(JDBCConnectionPoolParamsBean内のSecondsToTrustAnIdlePoolConnection): このオプションは、接続がアプリケーションに渡される前、または定期的な接続テストの処理中に、WebLogic Serverがその接続がまだ有効であり接続テストをスキップすることができると信頼する秒数を指定する。これは、特に大量のトラフィックが発生している場合に接続テストがパフォーマンスに及ぼす影響を最小限に抑える最適化オプションです。デフォルトは10秒。フラッシュされるまでのテストの失敗数—(JDBCConnectionPoolParamsBean内のCountOfTestFailuresTillFlush): (WebLogic Server 12.1.2で提供された機能)さらなるデータベースへの接続テストによって発生する遅延を最小限に抑えるためにWebLogic Serverが接続プール内のすべての接続をクローズするまでの接続テストの失敗数を指定する。デフォルトは2。無効化されるまでリフレッシュに失敗した接続の数—(JDBCConnectionPoolParamsBean内のCountOfRefreshFailuresTillDisable): (WebLogic Server 12.1.2で提供された機能)データベースの異常終了によって発生する接続リクエストの処理の遅延を最小限に抑えるためにWebLogic Serverが接続プールを無効にするまでの接続テストの失敗数を指定する。デフォルトは2。 主要なJDBCDataSourceRuntimeMBeanを覚えるデータソースの実行時の状況は、管理コンソールまたはJBCDataSourceRuntimeMBeanを使用してアクセスできます。JDBCDataSourceRuntimeMBeanは、データソースの現在の状態を取得するためのメソッドおよびアクティブな接続の平均数、アクティブな接続の現在の数、アクティブな接続の最大数など、データソースに関する統計を取得するためのメソッドを提供しています。 まとめ今回はWebLogic Serverのデータソースの機能を説明しました。アプリケーションの要件や環境によってはWebLogic Server 12.1.2で新たに加わったApplication Continuity機能やJDBCConnectionPoolParamsBean内のCountOfTestFailuresTillFlush、CountOfRefreshFailuresTillDisable属性などの新オプションが効果を発揮します。もう一度、(「解説!JDBCデータソースと接続プール」資料)をレビューしてください。次回の大阪開催はWebLogic Serverを基礎から学ぶシリーズ第3弾です。5月14日(参加申し込み開始は4月中旬)を予定しています。皆様のご参加をお待ちしています。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年2月12日に大阪で開催された「WebLogic Server勉強会@大阪 第119回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第2弾 解説!JDBCデータソースと接続プール」(講師:日本オラクル Fusion Middleware事業統括本部...

05. コラム - WebLogic勉強会 通信

2月12日開催:WebLogic Server勉強会@大阪:解説!JDBCデータソースと接続プール

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年2月12日に大阪で「WebLogic Server勉強会@大阪 第119回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第2弾 解説!JDBCデータソースと接続プール」(講師:日本オラクル Fusion Middleware事業統括本部 ソリューション本部 野邊 哲男)が開催されます。今回はそのアジェンダの詳細を紹介します。前回開催された「第114回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第1弾~インストールとドメイン構成入門」の続編です。(前回の開催レポート)。大阪地区の皆様、WebLogic Serverのアプリケーション構築でデータベース連携は重要なテーマの一つです。前回参加できなかった方、初心者も大歓迎です。最後にQuizも行い素敵なプレゼントもあります。皆様のご参加をお待ちしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JDBCデータソースと接続プールについてデータソースを利用する場合のコード例とデータソースを利用しない場合のコード例を具体的に説明しながら、JDBCデータソースを使用したアプリケーション開発のメリットを解説します。WebLogic ServerのデータソースWebLogic Serverではデータソースを作成する際に用途に応じて3種類から選択することが可能です。それぞれの種類の特長や用途を整理します。それから、データソースの構成や監視方法、構成ファイル、JDBCドライバ、データソース作成時や接続プールの主要なパラメータを紹介します。WebLogic Serverのデータソースの動作データソースの動作内容(振る舞い)について、操作内容やアプリケーションプログラミング毎に整理して解説します。データソースの作成時、起動時、停止時の動作内容、また、WebLogic Server起動時の動き、それからアプリケーションの接続要求時の振る舞いを学ぶことにより、実際のプロジェクトでSLA、環境に応じた最適な設定が可能です。特にWebLogic Server 12.1.2から登場した「接続プールの接続再作成失敗時に対応した制御機能」の振る舞いは参考になるでしょう。WebLogic Serverのデータソースの監視WebLogic Serverで提供しているデータソースの実行時の情報を監視、診断する仕組みを学びます。特に、管理コンソールやWLST、監視ダッシュボード、JMX APIや任意のMBeanブラウザ等を利用して、JDBCDataSourceRuntimeMBeanを監視することで、サーバやクラスタにデプロイされたJDBCデータソース実行時の統計情報を監視することが可能です。アプリケーションのチューニングやトラブルシューティングにも役立つでしょう。WebLogic Serverのデータソースにおける推奨/注意事項データソース設定パラメータのいくつか、特にプールの容量についてTipsをまとめます。初期容量、最小容量、スレッド数、テスト関連パラメータ、Connectionリーク、ステートメントキャッシュに関する注意事項などを整理します。Quizでポイント整理最後は、恒例のWebLogic Server勉強会Quizを出題します。Quizのテーマは「JDBCデータソースと接続プール」です。今回のセッションで取り上げた内容の理解度を深めるために是非チャレンジしてください。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年2月12日に大阪で「WebLogic Server勉強会@大阪 第119回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第2弾 解説!JDBCデータソースと接続プール」(講師:日本オラクル Fusion Middleware事業統括本部...

05. コラム - WebLogic勉強会 通信

「W-1選手権 WebLogic Serverクイズ王の皆様に聞いてみました。」

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年1月22日に「第43回WebLogic Server勉強会@東京」が開催されました。前半は「2013年WebLogic Server勉強会の総集編」として、Oracle ACEの山田貴裕 氏と共に昨年のトピックスを振り返りました。後半は「第3回W-1選手権 WebLogic Serverクイズ王決定戦!」を行いました。全16問の難問にチャレンジしていただき見事「第3回W-1優勝者」に輝いたのは増田義実 氏です。優勝おめでとうございます。今回は歴代「W-1優勝者」の皆様にスキルアップの秘訣をお聞きしましたのでレポートします。皆様のスキルアップのお役にたてれば幸いです。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「第3回W-1選手権 WebLogic Serverクイズ王は増田義実 氏2014年1月22日に開催された第3回W-1選手権は全16問中14問正解された増田義実 氏が優勝しました。今回の出題内容は、第1回W-1優勝者の山本裕介 氏、第2回W-1優勝者の山田貴裕 氏、オラクルユニバーシティの岡田 大輔さんが作成したもので、WebLogic Serverのインストールから起動停止、デプロイ関連が6問、データソース関連が2問、WLSTとクラスタリング関連が3問、Java EE関連が1問、チューニングとトラブルシューティング関連が3問、その他が1問の多岐に渡るものでした。前半の「2013年WebLogic Server勉強会の総集編」セッションでヒントが出ていたクイズもあったのですが、難問、奇問の16問中14問の正解率はお見事です。増田さん、優勝おめでとうございます。(写真:優勝者挨拶:自己紹介中の増田義実 氏) 「W-1選手権WebLogic Serverクイズ王決定戦!」はWebLogic Server関連のスキルアップ度(マニアック度?)を競う手段として2011年から不定期で(WebLogic Serverセッションの中で)開催されているイベントです。今回を含めこれまでに3回開催されました。(次回の開催時期は未定)注:WebLogic Server勉強会は、WebLogic Server勉強会精神「By developers, for developers」に基づき、ユーザ企業、システムインテグレータ、ベンダーのそれぞれの立場を超えて先人の成功・失敗談を共有しながら参加者のスキルアップを目指した「WebLogic Serverアプリケーション開発者・運用管理者」のための勉強会です。(東京では毎月開催、大阪では3カ月に1回開催)「歴代W-1優勝者の自己紹介」第1回W-1優勝者 山本裕介 氏現在、株式会社サムライズム代表取締役 @yusuke、http://samuraism.com/Java歴十年余り。WebLogic Serverを愛するあまり日本BEAシステムズに入社してWebLogic Serverのテクニカルサポートに従事していたことも。現在はJavaの開発環境であるIntelliJ IDEAの代理店事業などを手がける。第2回W-1優勝者 山田貴裕 氏現在、伊藤忠テクノソリューションズ株式会社 ソフトウェアサービス本部ミドルウェアサポート部所属Java EE開発者やDBAを経て、ミドルウェアのサポートエンジニアに。大規模案件にも従事し、設計や構築を担当することもある。WebLogic Server勉強会を通じて、Oracle ACE (Middleware & SOA) になる。第3回W-1優勝者:増田義実 氏現在、伊藤忠テクノソリューションズ株式会社 公益システム本部所属Java EE を中心とした開発を経てWebLogicサポートエンジニアとして従事。現在はサポートで得た経験を元にミドルウェア製品の設計・構築を担当。WebLogic Serverとは管理コンソールがない時代からの付き合い。(写真:W-1選手権クイズ出題&解説中:右から山本裕介 氏、山田貴裕 氏、岡田大輔さん) 「WebLogic Serverスキルアップのアドバイス」WebLogic Serverのスキルアップのために何かアドバイスがあれば教えてください。(山本裕介 氏)どうしても業務で使う範囲は限られてくるので、出来れば自分独自のアプリケーションを作って運用してみることです。OTN Licenseは非商用利用、開発目的であれば無償で利用できるライセンスになっています。例えばTODOアプリケーションを作って自分のマシンにセットアップしたWebLogic Serverにデプロイして使ってみればWebLogic Serverの色々な機能を使ってみたくなるのではないでしょうか。(山田貴裕 氏)実際に触るのは当然なのですが、勉強会に出てみることをお薦めします。出られない場合は勉強会の資料を後で読むだけでも仕方ないのですが、詳しい方に会って、直接お話しをすることで、体験談やライブの情報を得やすいです。知り合った方をきっかけに、つながりを広げることで、好循環も得られやすいでしょう。(増田義実 氏)WebLogic Server勉強会やOracle社主催のFusion Middleware系のセミナーなどに積極的に参加し、鮮度の高い情報を得るようにしています。また、実際に触ることに勝るものはありませんので、少しでも疑問に感じたり、おもしろそうだと思った機能があれば検証し、新しく発見した点は今後のためにもメモしておくことをお勧め致します。個人のWebサイトをお持ちであれば、発見した内容を広く公開することで、他のWebLogic Serverユーザから新しい情報を得られるなど、新たな発見もあることと思います。「Java, Java EEスキルアップのアドバイス」Java、Java EE関連のスキルアップの方法を教えてください。(山本裕介 氏)Twitterで時々関連キーワードを検索し、気になる人をフォローしておけば新鮮な情報がたくさん入ります。ブログにはTwitterより濃い情報がありますので、参考になるサイトが見つかればすぐにRSSリーダーに登録してウォッチするといいでしょう。また、情報を受信するだけでなく自分からも普段から発見や気になること、わからないこと(解決していなくても書くのが大事!)があればどんどんTwitterやブログに書いて情報発信をすることも重要です。自分が何に興味があるのか、どういうことをやっているのかを発信すれば自然とブログのコメントや@ツイートなどで情報が集まってくるようになります。(山田貴裕 氏)WebLogic Serverスキルアップと同様のため省略(増田義実 氏)個人的にはセミナーや各種メディア等で得られた情報では便利な点やコーディングイメージが湧かないので、まずは自分でアプリケーションを作ってみるようにしています(社内では“増田ファクトリー”として様々なツールやアプリケーションを提供しています)。最近ではいろんな機能が盛り込まれたIDEがたくさん出ていますが、コーディングが苦手な方はいろんなIDEに触れてみて、IDE自体に興味を持つところから始めても良いかと思います。形から入るのも大事です。「現在関心のあるIT技術など」(山本裕介 氏)Node.jsやGo言語など、話題になっている技術は日頃からつまみ食いしています。が、やはりJavaは総合的に「筋が良い」「バランスがとれている」言語だと思います。(山田貴裕 氏)ミドルウェアの分野は幅広いので、様々な製品・技術に興味はありますが、現在は NoSQL やビッグデータ関連の技術を伸ばしていきたいと思っています。(増田義実 氏)ミドルウェア分野以外ではウェアラブル技術。映画で見たような近未来体験がすぐそこまで来ている!?「最後に」今回はW-1選手権の歴代優勝者の皆様からのスキルアップのアドバイスをお届けしました。WebLogic Server勉強会では今後も皆様のスキルアップのために活動して行きますので、ぜひ、お時間の許す限りお越しください。次回は東京では2014年2月26日に第44回Oracle WebLogic Server勉強会@東京、大阪では2月12日に第119回 夜な夜な! なにわオラクル塾 WebLogic Serverを基礎から学ぶシリーズ2(WebLogic Server勉強会@大阪)を開催します。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 2014年1月22日に「第43回WebLogic Server勉強会@東京」が開催されました。 前半は「2013年WebLogic Server勉強会の総集編」として、Oracle ACEの 山田貴裕 氏と共に昨年のトピックスを振り返りました。後半は「第3回W-1選手権 WebLogic...

07. イベント/セミナー

WebLogic Server勉強会のおすすめ<2月開催の情報あり>

エンジニアのみなさま向けに、定期的にOracle WebLogic Serverの勉強会を開催しています。お気軽に参加していただけるように、夕方からの開催です。カスタマー・サービスのエンジニアがOracle WebLogic Serverのホットな話題を解説したり、現場の開発者によるJava企業システム開発の体験談、チューニングやトラブル・シューティングの苦労話、そしてJava EE6の最新情報など、現場の生の話題が盛りだくさんです。WebLogic Server勉強会は参加者同士のネットワーキングの場でもあるので、OracleWebLogicServer初心者の参加も大歓迎です。ぜひご参加ください。次回のOracle WebLogic Server 勉強会@東京次の2つの内容を予定しています。Lightning Talksセッション「XAER_NOTA : The XID is not validエラーの対処法 (仮)」「クラウド上の WebLogic Server を使って遊んでみよう!」Oracle WebLogic Server Transaction Basics2014年2月26日(水)18:30~20:30 (受付開始 18:00~) オラクル青山センター〒107-0061 東京都港区北青山2-5-8詳細および登録は こちら から。東京以外の大阪、名古屋での開催も含めた開催日程・会場一覧は、こちらをご覧ください。WebLogic Server 勉強会 通信『WebLogicServer勉強会通信』各回のレポート記事をまとめてあるので勉強会の雰囲気がつかめます。残念ながらご参加になれなかった回は、こちらをご覧ください。

エンジニアのみなさま向けに、定期的にOracle WebLogic Serverの勉強会を開催しています。 お気軽に参加していただけるように、夕方からの開催です。 カスタマー・サービスのエンジニアがOracle WebLogic Serverのホットな話題を解説したり、 現場の開発者によるJava企業システム開発の体験談、チューニングや トラブル・シューティングの苦労話、そしてJava EE6の最新情...

01. 特集 - WebLogic Server

Java EE 6 アプリケーション開発チュートリアル本が出来ました

WebLogic Serverファンの皆様、こんにちは。今日はJava EE 6 アプリケーション開発小冊子についてご紹介します。Java EE 6 については、書籍、資料、blogなどで既に多くの情報が発信されていますので、開発者の皆様も一度は耳にしたことがあるのではないかと思います。しかしながら、Java EE 6を実際の開発に適用するにはまだハードルが高い、というのが多くの皆様の実感ではないでしょうか。こうした声を踏まえ、オラクルではより実践的な、Java EE 6をすぐ試せるチュートリアル「実践!Java EE 6 - Oracle WebLogic Saerver 12cでJava EE 6を動かしてみよう!」を製作しました。本書はオラクルが開催するWebLogicやJava EE のイベント、セミナーにて無償でお配りしております。直近では、Oracle WebLogic Server 12c Forum 2014の「開発小冊子刊行記念: 30分でJava EE 6アプリを作ります」セッションにて、ご参加の方全員にプレゼントいたします。ぜひお越しいただき、本書と共にJava EE 6を試して頂ければと思います(セミナーの登録はこちら)

WebLogic Serverファンの皆様、こんにちは。今日はJava EE 6 アプリケーション開発小冊子についてご紹介します。Java EE 6 については、書籍、資料、blogなどで既に多くの情報が発信されていますので、開発者の皆様も一度は耳にしたことがあるのではないかと思います。しかしながら、Java...

05. コラム - WebLogic勉強会 通信

「2013年WebLogic Server勉強会の総集編」「第3回W-1クイズ王決定戦」開催間近

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年1月22日に「第43回WebLogic Server勉強会@東京」を開催します。前半は「2013年WebLogic Server勉強会の総集編」です。Oracle ACEの山田貴裕氏と昨年の12回分を1時間で振り返ろうというかなり無謀な企画ですが、時間が限られている分それぞれの内容を凝縮したポイントを解説しますので、欠席された回の情報取得キャッチアップのチャンスです。後半は「第3回W-1選手権 WebLogic Serverクイズ王決定戦!」です。WebLogic Serverを知り尽くす「達人(?)」に近づくために、「難問」や「奇問」を用意しました。素敵なプレゼントをゲットできるチャンスです。参加申し込み「第43回WebLogic Server勉強会@東京」からお願いします。お会いできるのを楽しみにしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)2013年WebLogic Server勉強会の総集編Oracle ACEの山田さんと1時間で下記のセッションを振り返ります。後半の「傾向と対策」としてクイズのヒントが満載です。ほぼ1年分なのでボリュームはありますが、短時間でWebLogic Serverの機能や特長を学び、整理する好機です。前半1時間集中できれば、あなたもクイズ王に近づくチャンス?ご活用ください。WebLogic Server基本編では、「Java EE アプリケーションをWebLogic Serverで動かしてみよう」、「起動・停止スクリプトを極める」、「WebLogic Server の開発モードと本番モード」、「WebLogic Server デプロイメント エッセンシャルズ」セッションから、インストール、ドメイン作成、管理サーバ、管理対象サーバ、アプリケーションのデプロイ、開発モードと本番モードなどの話題を取り上げます。WebLogic Serverデータベース接続編では、「WebLogic Serverとデータベース接続の基礎から応用」、「Active GridLink for RAC 入門」から、データソース、接続プール、汎用データソースとGrodLinkデータソースなど。特にOracle Databaseとの連携機能を説明します。WLST編では、「使ってみよう WLST」のWLST操作の基本的な流れをクイックレビューします。クラスタリング編では、「Oracle WebLogic Serverクラスタリングの勘所」からWebLogic Serverクラスタの範囲、インメモリレプリケーション機能などを解説します。Java EE編では、「Context and Dependency Injection(CDI)入門」、「Java Persistence API入門」、「WebLogic ServerでJAX-RS」のそれぞれの特長を説明します。チューニング編では、「Oracle WebLogic Serverチューニングのポイント」のまとめとしてWebLogic Serverのリクエスト処理、スレッドプール、ワークマネージャ、過負荷保護機能、モニターするMBean属性などのおさらいをします。トラブルシューティング編では、「今日から始めるトラブルシューティング - Flight Recorder入門」、「WebLogic Serverトラブルシューティングのポイント」、「スローダウン、ハングを一発解決! スレッドダンプはトラブルシューティングの味方」、「Flight Recorder活用の実践」、「高負荷試験で得た体験談」からトラブルシューティング手法などのポイントを説明します。第3回W-1選手権 WebLogic Serverクイズ王決定戦!歴代のWebLogic Server-1:W-1クイズ王は、第1回 山本裕介氏、第2回は 山田貴裕氏でした。第3回W-1クイズ王はどなたの手に.......豪華プレゼントあります。先日、Oracle ACEの山田貴裕さん、オラクルユニバーシティの岡田大輔さんと今回のクイズの内容に関する打ち合わせをしました。おもしろいクイズが集まりました。本番では10問から15問(時間の都合で流動的)になりそうです。今回も一番正解数の多い人(自己採点方式)が第3回W-1クイズ王になります。クイズにチャレンジしていただくことで間違いやすい点、勘違いしていた点など再確認、再発見につながります。参加申し込みは「第43回WebLogic Server勉強会@東京」からお願いします。皆様(初心者の方大歓迎)のご参加をお待ちしています。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2014年1月22日に「第43回WebLogic Server勉強会@東京」を開催します。前半は「2013年WebLogic...

05. コラム - WebLogic勉強会 通信

WebLogic Serverのチューニングとトラブルシューティング

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2013年の最後の2回11月27日と12月19日のWebLogic Server勉強会では、毎回アンケートで最も聞きたい内容トップ1,2に挙げられる「チューニングとトラブルシューティング」を取り上げました。岡田さんのセッション、「WebLogic Serverチューニングのポイント」では、スレッド管理をはじめとしたWebLogic Serverの設定やアプリケーションの設定の基本的なアプローチと設定方法。「WebLogic Serverのトラブルシューティングのポイント」では、サーバーログやGCログ、スレッドダンプなどの収集方法やツールの活用方法を解説してもらいました。LTセッションでは、現場での体験談や各種パラメータの意味や設定方法など実践的な内容をお話しいただきました。チューニング、トラブルシューティングに有益な情報が満載です。ここではセッションのポイントをまとめて見ます。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)WebLogic Serverチューニングのポイントまず、初めにWebLogic Server上にアプリケーションをデプロイして起動している環境を認識する必要があります。アプリケーションはH/W, OS, JVM, WebLogic Serverのスタック上で動作しています。つまり、「チューニング」の対象はこのすべてのレイヤーになります。アプリケーションを期待通りに動作させるためには、H/W, OS, JVM, WebLogic Serverおよび アプリケーションが適切に設定され、プログラミングされなければなりません。岡田さんは、WebLogic Serverの設定、アプリケーションプログラムの開発と設定の視点でポイントを下記の様に整理しています。WebLogic Serverのリソースを効率的に使用して最適なパフォーマンスを得るためには、スレッドプール、自動チューニングスレッドプール(初期値の設定が可能)、ワークマネージャの振る舞い、データソース容量の管理などが重要です。Webアプリケーション開発のポイントは、JSPデプロイ前コンパイル、HTTPSessionの設定値、EJBフリープールとキャッシュなどです。 WebLogic Serverは自動チューニング機能や過負荷保護機能などリソースを効率良く使用する機能を提供しています。デフォルト設定でもある程度の性能が得られますがWebLogic Serverのリクエスト処理の流れを把握して各パラメータの設定を行えばより効率的な処理を実行できます。WebLogic Serverだけでなくアプリケーション実装のチューニングも実施してください。WebLogic ServerトラブルシューティングのポイントWebLogic Server上でアプリケーションを動かしている場合に、WebLogic Serverがスローダウン/ハングする、データソースの接続先のデータベースからの応答が悪くなる、プロセスのCPU使用率が100%近くなり応答が返らない、Javaヒープ使用量が徐々に増え続けていく、WebLogic Serverがクラッシュする (Coreを吐く)、WebLogic Serverが起動しないなどの状態に陥る可能性があります。その時に何をすべきか、トラブルシューティングの手順を学びます。 WebLogic Serverが提供する様々な情報を活用するためにWebLogic Serverのログ情報の取得、JVMのスレッドダンプの取得と分析、診断イメージキャプチャの取得方法、Flight Recorder記録開始と分析など。 やはりチューニングやトラブルシューティングは総合力です。WebLogic Serverの基礎をしっかり固めてステップアップしましょう。WebLogic Server勉強会は参加者皆様のスキルアップを目指して開催されています。次はLTセッションを紹介します。「Webサーバ・プラグインのタイムアウト設定」伊藤忠テクノソリューションズ株式会社の橋本 和俊氏がOracle WebLogic Server 12.1.2とOracle iPlanet Web Server 7.0.17を使用した際のWebサーバプラグインのタイムアウトのパラメータの意味と振る舞いについて語りました。資料は、「Webサーバ・プラグインのタイムアウト設定」です。「WebLogic Server高負荷試験で得た経験談―性能改善の一例」サクラシステムサービス株式会社の王鈺氏が「WebLogic Server高負荷試験で得た経験談―性能改善の一例」を紹介しました。侍やFlight Recorderを使用して見つけたホットメソッドへの対処としてJVMの適切なオプションを見つけ出した経験談です。資料は、「WebLogic Server高負荷試験で得た経験談―性能改善の一例」です。「やっぱりWTC!」Facebook上の「やっぱりWebLogic!」グループ」管理人の櫻井将一郎氏が「やっぱりWTC!」と題してWebLogic ServerとOracle Tuxedoが連携するための機能であるWTC(WebLogic to Tuxedo Connector)の相互運用チュートリアルを紹介しました。WebLogic ServerはWTCを介してTuxedoのドメインゲートウェイと通信できるのでJavaとC/COBOLアプリケーションの相互呼び出しをシンプルに実現できます。資料は、「やっぱりWTC!」です。「Native Memory Tracking (NMT)」&「Oracle JDBCドライバプロパティの活用」伊藤忠テクノソリューションズのOracle ACE山田貴裕氏がLTセッション(2つ)を講演しました。初めのセッションは、JDK7u40以降で実装されたJavaヒープ以外のネイティブ領域の使用状況をトラッキングできる、「Native Memory Tracking (NMT)」 の使用方法、サンプル。次のLTは、「Oracle JDBCドライバプロパティの活用」と題して、JDBCドライバのパラメータでデータベース接続時のタイムアウトやソケット読込時のタイムアウトの設定方法と動作内容を解説しました。資料は、「Native Memory Tracking (NMT)」、「Oracle JDBCドライバプロパティの活用」、です。「Flight Recorder活用の実践」GlassFishユーザー・グループジャパン 副会長の蓮沼 賢志氏が「Flight Recorder活用の実践」として、開発テスト時にFlight Recorderを活用するメリットを紹介しました。実際の経験からシステム障害の原因のほとんどはアプリケーションの不具合であることを考えると、開発時にFlight Recorderでアプリケーションの動きを「透視する」ことができれば本番環境での障害を未然の防止策につながるはず。資料は、「Flight Recorder活用の実践」です。2013年お付き合いありがとうございました。来年もよろしくお願いします。2013年のWebLogic Server勉強会は東京では1月から12月まで計12回、大阪では3カ月に1回のペースで計4回開催することができました。最近は、Lightning Talksセッションで現場で経験された話題が増えてきています。また、「お悩み相談室」も毎回盛んになってきました。来年も継続する予定です。WebLogic Server勉強会スタッフ一同、皆様の積極的なご参加をお待ちしています。本年は大変お世話になりました。どうぞよい年をお迎えください。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。2013年の最後の2回11月27日と12月19日のWebLogic Server勉強会では、毎回アンケートで最も聞きたい内容トップ1,2に挙げられる「チューニングとトラブルシューティング」を取り上げました。岡田さんのセッション、「WebLogic Serverチューニングのポイント」では、スレッド管...

07. イベント/セミナー

【2014/1/31】WebLogic Server 12c Forum 2014 開催!

WebLogic Serverファンの皆様、こんにちは。今日は半期に一度のWebLogicイベント「WebLogic Server 12c Forum」のご案内をいたします来る2014年1月31日(金)、「WebLogic Server 12c Forum 2014」を開催します。今回の見どころはズバリ、クラウド/モバイル/Java EEです■ クラウド米国オラクルで、WebLogicを含むアプリケーション基盤製品を統括するMike Lehmannが講演します。新しく展開するWebLogicクラウドを中心に、パブリック/プライベート/ハイブリッドクラウドに向けたWebLogicについてご紹介します■ モバイル三菱UFJインフォメーションテクノロジー様から講演頂きます。WebLogic12cのWebSocketを徹底検証頂きました。その驚くべき高速性について、様々な角度からご紹介頂きます■ Java EEJava EE 6アプリケーションをライブで開発します。Java EE 6 の高い開発生産性を体感できます。セッションの最後にはJava EE 6開発のための実践小冊子をプレゼント申込みサイトはこちら。年末年始のお休みに入る前にぜひエントリーください!

WebLogic Serverファンの皆様、こんにちは。今日は半期に一度のWebLogicイベント「WebLogic Server 12c Forum」のご案内をいたします 来る2014年1月31日(金)、「WebLogic Server 12c Forum 2014」を開催します。今回の見どころはズバリ、クラウド/モバイル/Java EEです ■ クラウド 米国オラクルで、WebLogicを含むアプリケ...

05. コラム - WebLogic勉強会 通信

WebLogic Serverインストールとドメイン構成入門

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。11月13日にイベント「WebLogic Server勉強会@大阪」が開催されました。大阪では3カ月に1回の頻度で開催されています。今回のテーマは、第114回 夜な夜な! なにわオラクル塾 -WebLogic Serverを基礎から学ぶシリーズ第1弾 ~インストールとドメイン構成入門です。講師は日本オラクル Fusion Middleware事業統括本部 ソリューション本部の野邊 哲男さんです。資料は、「WebLogic Serverインストールとドメイン構成入門」です。WebLogic Serverの初心者向けにドメイン管理の基礎やドメインの構成要素についての説明と、要件や状況に応じたWebLogic Serverのドメイン構成例の解説とデモが行われました。最後に恒例の「Quiz」も行われましたので、トピックスとQuiz内容を簡単にレポートします。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)WebLogic ServerとはWebLogic Serverとは、を説明した図です。 WebLogic ServerとJava EEWebLogic Serverの進化を見ると、Java EE仕様準拠の歴史でもあることが分かります。 問題1:WebLogic ServerとJava EEQuizの第1問目はWebLogic ServerとJava EEに関する下記の問題でした。 解答1:WebLogic ServerとJava EE第1問目のQuizの正解は3.です。1. は間違い。WebLogic Serverは企業向けのWebアプリケーションサーバですので、各種のニーズに応えるために一部、独自の拡張機能を提供しています。2.は間違い。Javaの仕様はJCP(Java Community Process)で規定されたプロセスで決定されます。4.は間違い。上図のようにJDKとWebLogic Serverのバージョンはそれぞれ対応関係があります。問題2:インストールとConfiguration WizardQuizの第2問目は最新WebLogic Server 12.1.2に関する問題でした。 解答2:インストールとConfiguration Wizard正解は1.と2.です。3.は間違い。サイレントモードでも、インストールコンポーネントを選択できます。4.は間違い。WebLogic Server 12.1.2のConfiguration Wizardはコンソールモード、サイレントモードをサポートしていません。GUIが無い環境では、WLSTを使用してください。問題3:ドメインの作成Quizの第3問目はドメインの作成に関する問題でした。 解答3:ドメインの作成正解は4.です。1.は間違い。ドメインには複数のサーバを構成することが出来ます。2.は間違い。開発環境のドメインでも本番環境同様に管理対象サーバを構成できます。ただし、開発モードでは管理サーバのみ使用してアプリケーション開発を行うのが一般的です。3.は間違い。AdminServer以外の名前を付けることができます。まとめ当日は全部で5問出題させていただきました。セッションの内容で重要だと思われる点や特に間違いやすい点をQuiz形式で再確認するために今後も継続する予定です。Quizの結果によりプレゼントも用意しております。ぜひ、チャレンジお願いします。次回のWebLogic Server勉強会@大阪は2014年2月開催の予定です(次回の東京開催、第41回WebLogic Server勉強会@東京は来週11月27日です)。お楽しみに。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 11月13日にイベント「WebLogic Server勉強会@大阪」が開催されました。大阪では3カ月に1回の頻度で開催されています。今回のテーマは、第114回 夜な夜な! なにわオラクル塾 -WebLogic...

05. コラム - WebLogic勉強会 通信

間もなく開催!WebLogic Serverのここが知りたい! WebLogic Server勉強会@Oracle Days 2013

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。10月23日のイベント「Oracle Days Tokyo 2013」のD2-JV-2セッションでは、「WebLogic Serverのここが知りたい!WebLogic Server勉強会@Oracle Days」が開催されます。WebLogic Serverアプリケーションの運用管理ノウハウ、チューニング、トラブルシューティングなどのテーマごとに現場の体験をもとに注意点や解決方法を語るLTです。WebLogic Serverに限らず、Javaアプリケーション開発者であれば現場で参考になること、ヒントがたくさんあるでしょう。ぜひ、この機会にWebLogic Serverのディープな世界へ。初心者歓迎。ご参加をお待ちしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)アジェンダが決まりました。アジェンダが決まりました。WebLogic Server勉強会の常連者がそれぞれの現場での経験談を語るLTです。チューニング、トラブルシューティング、お勧め情報です。ぜひ、お楽しみに。Oracle WebLogic Serverのチューニングテクニックを学ぶ「WebLogic Serverチューニングのポイント」 日本オラクル 岡田 大輔「Oracle JDBCドライバプロパティの活用」 伊藤忠テクノソリューションズ株式会社(OracleACE) 山田 貴裕氏「WebLogic Serverのタイムアウトに関するTIPS」 伊藤忠テクノソリューションズ株式会社 橋本 和俊氏「高負荷試験で得た体験談」 サクラシステムサービス株式会社 王 鈺氏Oracle WebLogic Serverのトラブルシューティングテクニックを学ぶ「WebLogic Serverトラブルシューティングのポイント」 日本オラクル 岡田大輔「サポート担当から見た障害解析」 富士通SSL 濱谷 芳明氏「Native Memory Tracking機能」  伊藤忠テクノソリューションズ株式会社 (OracleACE) 山田 貴裕氏「Flight Recorder活用の実践」  GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 賢志氏Oracle WebLogic Serverお勧め情報「困った時はOracle Directへ」 日本オラクル 浅沼 隆司「やっぱり WebLogic!」 FacebookやっぱりWebLogic!管理人 櫻井将一郎氏【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 10月23日のイベント「Oracle Days Tokyo 2013」のD2-JV-2セッションでは、「WebLogic Serverのここが知りたい!WebLogic Server勉強会@Oracle Days」が開催されます。WebLogic Serverアプリケーションの運用管理ノウハウ、チュ...

05. コラム - WebLogic勉強会 通信

「WebLogic Serverの動的クラスタ」と「Oracle Coherence概要」レポート

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。9月26日に開催された「第40回WebLogic Server勉強会@東京」をレポートします。前半は岡田さんがクラスタの概要とWebLogic Server 12.1.2の新機能の動的クラスタを解説しました。「WebLogic Serverクラスタリングの勘所」(日本オラクル 岡田 大輔)。次は松林さんがオラクルのインメモリデータグリッド製品のOracle Coherenceの概要を説明しました。「Oracle Coherence Oracle WebLogic Server との親和性」(日本オラクル 松林 晶)。最後は、「お悩み相談室」です。それぞれの注目点をまとめて見ました。なお、次回はOracle Days Tokyo 2013の会場で開催する「スペシャル版」です。ご参加お待ちしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)WebLogic Serverクラスタリングの勘所WebLogic Serverでは複数の「サーバ」(WebLogic Serverのインスタンス)の論理的なグループをクラスタと言います。各サーバ上にデプロイされたアプリケーション・サービスを論理的に同じグループで扱うことができるので、拡張性・高可用性に優れたアプリケーション構築が可能です。また、クライアントはどこのサーバ上のサービスにリクエストを送信するか意識する必要はありません。クラスタが複数のサーバを協調動作させながら適切なサーバで処理を行います。クライアントからはあくまで一つのサーバにリクエストを送信するように見えます。 クラスタの目的クラスタの目的は次の2つです。負荷分散 … クラスタメンバにリクエストを均等に分配フェイルオーバ … 障害発生時も処理を別のクラスタメンバで継続するWebLogic Serverでは、クラスタ対応のアプリケーションサービスが決まっています。下図を参照してください。 動的クラスタとはWebLogic Server 12.1.2から登場した新機能です。サーバテンプレートを基にサーバを動的に構成することでスケールアウト構成を容易に実現できるようになりました。これまでは、クラスタメンバのサーバの構成を個々に設定する必要がありましたが、動的クラスタは、サーバーの設定をテンプレート化できる(サーバテンプレート)ので、管理対象サーバが多数あるドメインでは設定を効率化できます。事前に設定した最大数までクラスタメンバ数の増減が可能です。 詳細は「WebLogic Serverクラスタリングの勘所」(日本オラクル 岡田 大輔)資料をご覧ください。Oracle Coherence Oracle WebLogic Server との親和性松林さんが、WebLogic Server勉強会で初登場のOracle Coherencenoの概要とCoherence*WebとManaged Coherence Serversを解説しました。Oracle Coherenceはインメモリーデータグリッド製品に属し、データを複数サーバのメモリに分散してキャッシュする機能を提供します。複数サーバに渡る分散KVSにより、分散データの可用性向上、サーバの動的な追加・縮退に対する自動リバランス機能があります。また、様々なデータ処理機能を提供します。例えば、データの存在する場所(JVM)で処理を実行する仕組みがあるので無駄なデータ送受信を行いません、また、データの分散に沿ったパラレル処理が可能です。さらに、データストア連携として、外部データソース(RDBMS)とキャッシュデータを自動的に連携できます。キャッシュの更新処理のタイミングは、同期書き込み(デフォルト)、非同期書き込みの選択が可能です。フィルタによる条件指定でリスンする対象データの絞込みを行うことで、データの変更時にリスナーにイベントが通知される仕組みも提供されます。 データ処理用にはSQLを使用するRDBMSとは異なり、KVS(Key(キー)とValue(値)のシンプルなデータ構造をストアする仕組み)を使用します。キャッシュデータは、Coherenceが提供するシリアライズ/デシリアライズの仕組みのPortable Object Format(POF)です。Java標準(java.io.Serialize)より、シリアライズ後のサイズを小さくすることが可能です。詳細は「Oracle Coherence Oracle WebLogic Server との親和性」(日本オラクル 松林 晶)資料をご覧ください。お悩み相談室質問WLSTコマンドで、管理対象サーバの設定を一括して取得するには、どのようにすればいいでしょうか?複数の管理対象サーバで設定の差異を確認したいのですが、ls()やls('a')ではすべての情報を拾いきれず、結局は管理コンソールで目視確認しています。ですがこの方法だと"意図しない設定変更をしていない"ことが確認できないため、できれば、「設定一覧をファイル出力し、diffで差分を確認したい」と考えております。回答WLSTなどで管理サーバに接続して、そこでドメインの情報を取得する方法があります。オフラインの例としてちょうどいい例が下記のサイトにありますのでご紹介します。仕組みはドメインのコンフィグレーションをチェックする方法で、その結果をHTMLで成形した形式で出力します。その中から必要なものを取り出す方法があります。参考サイト[WLS] WLST Offline Script to Create Summary of WebLogic Domainそれから、意図しない設定変更がされていないことを確認したい、ということであれば、構成ファイルのアーカイブを活用できます。構成ファイルのバックアップ・コピーを作成するようにOracle WebLogic Serverを構成できます。そうすることで、構成の変更を元に戻す必要がある場合や、万一構成ファイルが破損した場合に、回復しやすくなります。管理サーバーは起動時に、構成ファイルを含むconfig-booted.jarというJARファイルを保存します。構成ファイルを変更すると、古いファイルはドメイン・ディレクトリの下のconfigArchiveディレクトリ内で、連続番号の付いた名前のJARファイル(config-1.jarなど)に保存されます。それを解凍して現在のアーカイブと比較して違いがあるか比較する方法です。WebLogic Serverのここが知りたい! WebLogic Server勉強会@Oracle Days 2013次回の勉強会は特別版です!2013年10月23日 18:00 ~ 19:30 Oracle Days Tokyo 2013 D2-JV-2セッション 会場:ウェスティン東京[恵比寿]概要WebLogic Server勉強会は、毎回WebLogic Server、JVM、Java EEに関する技術的なテーマを取り上げています。目的は参加者のスキルアップで、これまで40回以上継続しています。今回、現場の体験をもとにWebLogic Server勉強会講師陣がアプリケーション開発者・管理者が陥りやすい点を披露し注意点や解決案を解説します。チューニングやトラブルシューティングのTIPS、データベース連携、スレッドダンプ分析など実践情報が満載です。WebLogic Serverに限らず、Javaアプリケーション開発者であれば現場で参考になること、ヒントがたくさんあるでしょう。ぜひ、この機会にWebLogic Serverのディープな世界へ。次回の参加申し込み受付中!申し込みは、Oracle Days Tokyo 2013申し込みページからお願いします。【イベント情報】10月23日:WebLogic Serverのここが知りたい!WebLogic Server勉強会@Oracle Days Tokyo 2013【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 9月26日に開催された「第40回WebLogic Server勉強会@東京」をレポートします。前半は岡田さんがクラスタの概要とWebLogic Server 12.1.2の新機能の動的クラスタを解説しました。「WebLogic Serverクラスタリングの勘所」(日本オラクル 岡田 大輔)。次は松林...

05. コラム - WebLogic勉強会 通信

WebLogic Server勉強会のLTセッション&お悩み相談室

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。8月21日に開催された「第39回WebLogic Server勉強会@東京」の後半セッションをレポートします。Lightning Talksセッションでは、初めにCTCの橋本さんが、SSLがどのような意味を持って、どのように活用すべきか?サーバ証明書(発行されるもの)とCA証明書(認証局)の関係などのポイントを説明されました。「Oracle WebLogic Serverにおける証明書のインストール方法、及び、SSL 設定」(伊藤忠テクノソリューションズ 橋本 和俊氏)。次は岡田さんがWebLogic Server 12.1.2で新たに追加された動的クラスタ機能の概要を紹介しました。最後はいつもの「お悩み相談室」です。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)CTCの橋本氏 LT講演初めに会場内参加者に質問。「SSLを使っている人は?」手が挙がる割合はあまり多くなく、使っている人はあまりいない模様。「では、WebLogic ServerでSSLを使っている方は?」、さらに少くなり....そこで橋本さんは、「SSLの設定の資料を準備してきたのですが、そもそもSSLはどのようなものかを中心に説明します、現在SSLをあまり使っていない場合でも、今後必要な場合に役立つでしょう。」ということでスタート。SSLの概要Secure Sockets Layer (SSL)は、ネットワークを介して接続する2つのアプリケーションが互いのIDを認証できるようにするとともに、アプリケーション間で交換されるデータを暗号化することで、セキュアな接続を実現します。認証を使用すると、サーバは(場合によってはクライアントも)ネットワーク接続の相手側アプリケーションのIDを検証できます。ネットワーク経由で送信されるデータは暗号化されるので、予定されている宛先以外には解釈できません。橋本さんは、サーバ証明書(発行されるもの)とCA証明書(認証局)について、次のように例えました。会場に「人を認識するためには、どうするか?」と問いました。普段の生活の中では、「運転免許証を見せる」ことをイメージすると分かりやすいですね。この場合、免許証がサーバ証明書に相当し、CA証明書(認証局)は免許証を発行している国になります。つまり、国が発行している運転免許証の記載事項は正しいと証明できるので、それを使用すると本人確認が出来ることになります。(なお、橋本さん日本酒検定の資格を持っているとのことですが、その資格を知っている人が少ないので証明書としては不向きということです。) WebLogic ServerのSSLの設定手順どの製品もほぼ同じ手順です。tomcat, Oracle iASなども同じなので、基本手順を覚えると便利です。詳細は「Oracle WebLogic Serverにおける証明書のインストール方法、及び、SSL 設定」をご覧ください。 WebLogic Server12.1.2を使ってみました。次のスピーカは岡田さんです。まず、7月にリリースされた12.1.2バージョンについて、インストーラが変わったこと、HTML 5やOracle Database 12cに対応したなどの新機能に加えて、「クラスタの設定が変わった!」という説明がありました。これまではサーバを定義してからクラスタを定義する流れが、新機能の「動的クラスタ」はサーバテンプレート内容を見て、WebLogic Serverが実行時にクラスタのサーバの設定を行うのでクラスタ利用者にとっては運用が楽になり非常に便利な機能です。JMSの場合は、動的クラスタを使うと、サーバごとに設定する必要が無く、自動的にクラスタメンバーを増やしたり減らしたりしてくれます。また、JTAの設定はクラスタ単位で設定可能、トランザクションタイムアウトの設定が可能(これまではドメイン単位)になりました。動的クラスタの機能については、9月26日開催予定のWebLogic Server勉強会で行いますのでお楽しみに。お悩み相談室今月は下記の質問に「WebLogic Server勉強会チーム」から回答しました。現場で困っていることなどありましたら、何でも構いませんので質問してください。次回も皆様からのご質問お待ちしています。1.JRockitにあったjrcmdがjcmdとしてJavaSE7に加わってますが、微妙に違っていて戸惑います。ぜひ使い方を教えてください。。。2.JVMの標準出力ログの推奨するローテーション方式3.WebLogic Serverの運用管理を行うには、やっぱり、Javaで開発できるスキルもないと難しいでしょうか?(自分はインフラ・システム運用専門なので言語による開発がほぼできない・・・)4.Weblogic Server 11gR1の環境で、APサーバ(Linux CentOS5.8 64bit)のメモリ使用量が膨れあがる。定期的にjava(FWはseasar2)のFULL_GCは行っているが、サーバのメモリ使用量はWebLogic Serverの再起動を行わないと解消されないという事象が発生しております。どのような原因が考えられるかご教示いただければと思っております。5.メモリのチューニングについて知りたいと思っています。6.WebLogic Serverって、おいくらですか? (写真左からCTCの山田さん、オラクル岡田さん、CTCの橋本さん、オラクルの浅沼さん)【イベント情報】9月26日: 第40回WebLogic Server勉強会参加申し込み受付け中10月23日:WebLogic Serverのここが知りたい!WebLogic Server勉強会@Oracle Days Tokyo 2013【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 8月21日に開催された「第39回WebLogic...

05. コラム - WebLogic勉強会 通信

Java EE アプリケーションをWebLogic Serverで動かしてみよう

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。8月21日に開催された「第39回WebLogic Server勉強会@東京」の前半の「Java EE アプリケーションをWebLogic Serverで動かしてみよう」(日本オラクル オラクルユニバーシティ 岡田 大輔)セッションをレポートします。初めにJava EEアプリケーションの基本的な仕組み、これまでのJava EEの経緯の説明がありました。その後IDEを使用してJSF, EJB, JPAのアプリケーションを作成し、そのアプリケーションを動かすために必要なWebLogic Serverの設定、デプロイメント方法がステップ・バイ・ステップで解説されています。本年7月にリリースされたWebLogic Server 12.1.2を使用する際の注意点にも触れています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)Java EEアプリケーションを理解しようアプリケーションサーバはビジネスロジックを実行するためのミドルウェアです。例えば、図の左側のクライアント(ユーザインタフェース)から入力されたメッセージをアプリケーションが受け取り、必要な処理をして結果をデータベースに書き込むようなアプリケーションの場合は、クライアントとアプリケーションがネットワーク越しで会話する仕組み、アプリケーションが使用するデータベースへの接続確保などはアプリケーションサーバの担当部分になります。アプリケーションサーバはこのようにアプリケーションが共通として必要な機能(ビジネスロジックの実行、リソースアクセス、トランザクション・セキュリティ管理など)を提供しています。アプリケーションの移植性を高めるためには、アプリケーションサーバが提供する機能を標準のAPI仕様として決めることが必要で、そのためにJava EE仕様が策定されています。 おさらい:Java EEアーキテクチャの変遷①Java EEがまだJ2EEと呼ばれていたころ、J2EE 1.4では、アプリケーションの作りは下図のようになっており、Servlet/JSP, EJBなどの仕様が規定されアプリケーション開発がおこなわれていました。仕様自体が複雑であったり、作り込みの部分が多く発生したために、OSSのフレームワークを使用してアプリケーション構築を行うプロジェクトが多くなっていました。 おさらい:Java EEアーキテクチャの変遷②Java EE 5が登場してJava EEという名前に変わりました。Java EE 5はOSSプロジェクトのノウハウが仕様に盛り込まれました。また、「開発のしやすさ」Ease of Developmentを目的に掲げXML定義体をオプションにするなどアノテーションを使用し、すっきりしたプログラミングスタイルが盛んになりました。しかし、まだフレームワーク間を連携するような機能は十分とは言えませんでした。フレームワーク間を繋いであげる部分が抜けていたので、新たなフレームワークが必要になっていました。 おさらい:Java EEアー���テクチャの変遷③Java EE 6はさらにEase of Developmentを推進して策定された仕様です。CDI (Contexts and Dependency Injection)により、JSF2.1, EJB3.1, JPA2.0それぞれのフレームワークがシンプルに連携できるようになりました。このようにJava EEはJ2EEの時代から繰り返し、フィールドからのフィードバックを反映したり、肥大化した仕様を適切に整理したりしながら進化しています。Java EE 6は単体で開発フレームワークとして使用できるレベルまで成熟したと言えます。 サンプル今回のサンプルアプリケーション(CRUD)は、Java EE 6のJSF, EJB, JPAを使用したもので、IDEを使用して作ったものです。IDEはどれでも良かったのですが、NetBeansを使いました。Java EE 6がサポートされているものでWebLogic Serverで動作するものを選択可能です。アプリケーションのデプロイ先のアプリケーションサーバを登録、プロジェクトを新規に作成、データベース表からのエンティティ・クラス(この時に先にデータソースを作成しておくと便利)、エンティティからのJSFページ・クラスを順に実行することでCRUDアプリケーションが完成します。(NetBeans 7.3.1はデフォルトはJSF 2.2でJSF 2.0ではないので、若干書き換えないと動かないものがあるので注意) アプリケーションを動かす環境の構築と設定WebLogic Server 12.1.2のインストールですが、OUIにインストーラが変更になっています。入力項目は同じなので違和感は思います。ただ、コンソールモードがないので非GUI環境ではWLSTなどの活用をお薦めします。ただし、MW_HOME, BEA_HOMEがORACLE_HOMEに変更になったり、12.1.2ではサンプルのインストールは別になったので不要な場合はチェックをはずすなどの注意点あり。ドメイン作成から、アプリケーションの実行と監視までドメインはWebLogic Server管理の単位です。Fusion Middleware構成ウィザードを使って作成、開発者モードと本番モードの違い、ドメインディレクトリ構成、サーバの起動、データソースの作成、デプロイ、アプリケーションの開始、モニタリングなど。これまでWebLogic Server勉強会で取り上げてきている内容です。ぜひ、「Java EE アプリケーションをWebLogic Serverで動かしてみよう」を復習してください。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 8月21日に開催された「第39回WebLogic Server勉強会@東京」の前半の「Java EE アプリケーションをWebLogic Serverで動かしてみよう」(日本オラクル オラクルユニバーシティ 岡田 大輔)セッションをレポートします。初めにJava...

05. コラム - WebLogic勉強会 通信

一歩先に進むためのWLST活用技法 + お悩み相談室

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。7月23日に開催された「第38回WebLogic Server勉強会@東京」の後半のセッションをレポートします。Lightning Talksでは、伊藤忠テクノソリューションズ株式会社ソフトウェアサービス本部 ミドルウェアサポート部の山田 貴裕氏が「一歩先に進むためのWLST活用技法」で、WebLogic Serverシステム管理者向けに、Jython(Python)言語機能の活用、再利用を可能にするための機能、オフラインモードの活用、最後にWLST Tipsを語りました。また、今回から始めた「お悩み相談室」は初回から楽しく活発なQ&Aが展開されました。好評のためこのコーナーはしばらく継続する予定です。WebLogic Serverに関するご質問お待ちしています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「一歩先に進むためのWLST活用技法」WebLogic Server勉強会では、お馴染みになりましたOracle ACEの山田さんが前半の岡田さんセッションに引き続きWLSTについて語りました。 Jython(Python)言語機能の活用まず初めにWLSTを使いこなすためにはJython言語仕様をしっかりマスターし、使いこなそうという話がありました。ただし、WebLogic Server 11g以降のWLSTで使用されているのはJython 2.2.1なので、最新版のJythonの言語仕様との違いに注意すること。最新のPythonはPython3.3.2が出て、3.4 alpha 1が進んでいる状態です。また、Jythonの最新版はJython 2.5.3 Final版が出て、Jython2.7beta 1が2013年2月に出ている状況です。最新版で使いたい機能がWLSTでサポートされていないのがちょっと残念。 Jython(Python)の組み込み関数の利用実践で役に立つ組み込み関数としていくつか紹介(dir, type, raw_inputなど)されました。dir(): 現スコープの名前を返す、dir(型): 引数を付けるとオブジェクトの属性が分かる、type(型):引数をつけると属性がわかる。型がわからないと不便(間違い防止に有効)、raw_input():ユーザからの入力を取得できるので利用する際に便利。また参考情報として、lambdaおよびリスト内包表記の利用の話がありました。LambdaはJDK 8から使え、Pythonはもともと使える機能で、簡潔な表現が可能で慣れてくると便利。 再利用を可能にするための機能WLSTで共通で利用できるモジュールの作成(WLSTで使うときのスクリプトはWLS_HOMEの下に配置すると起動時に読み込んでくれる)、WLSTで共通で利用できるライブラリの作成(/common/wlst/lib に配置する)、大規模のスクリプトで有益なJythonモジュールとしてのWLSTのインポート機能の説明がありました。モジュール分けをしてインポートする場合は、cmo, グローバル変数は使用できないなど制限があるので注意すること。 オフラインモードの活用WLSTのオフライン機能を使用してどのようにドメイン構成を操作するかという話がありました。ドメインコンフィグレーションファイルを読み込んでメモリ上で必要な変更を行いファイルに結果を反映する、また、Templateを読み込み、メモリ上で更新してドメインコンフィグレーションファイルに書き込むなど。関係は下図を参考にしてください。 なお、7月に最新版のWebLogic Server 12.1.2がリリースされましたが、12.1.2ではドメイン構成ウイザードのCUIが無くなったのでWLSTを使ってドメインを作ることを考える必要が出てくるかもしれない、ということでその参考例の紹介もありました。 WLST Tips実践的な情報としてTipsの紹介がありました。1. easySyntax:開発時は便利、本番では使わないこと。2. -skipWLSModuleScanning:WLSTは初回起動時にパッケージのスキャンとキャッシュを行うが、この部分をスキップして、若干ですが起動時間を(多少)短縮できる機能。3. storeUserConfig:パスワードをスクリプトや設定ファイルなどに直書きしないで、暗号化されたユーザー名・パスワードを保存し、connect() 時に利用することが可能。スクリプト作成の際にユーザ名、パスワードの取り扱いはセキュリティ上、注意しなければなりません。この機能を推奨。4. WLSTの開発環境は通常のエディタでもいいのですが、OEPE(Oracle Enterprise Pack for Eclipse)はコード補完機能があるので便利、ただし起動が重い難点あり。お悩み相談室当日は事前に頂戴した質問をいくつかのカテゴリに分類(①②...が実際の質問)して回答しました。ご参加されなかった方にご参考まで、取り上げた質問を紹介します。(なお本レポートでは回答は割愛させていただきます。)1. 情報探しています。①普段Oracleデータベース運用の仕事をしているのですが、新しい案件にてWebLogic Serverの運用も担当することになりました。どのような運用管理業務を実施した方が望ましいのかお聞きしたいです。 ②自動化ツール情報を知りたい③勉強を始めたばかりで詳しく知らないので勉強するためのサイト情報などを頂ければ幸いです。2. アプリケーション移行①現在アプリケーションを開発・保守運用を行なっておりますが、お客様事由により従来のOracleASからWeblogicへの切換が必要となり具体的にAPへの影響が出るのかを知りたい。 ②OracleASからの移行3. .NET関連①.NETアプリとの連携について ②.NETとの連携方法について ③.NETからのWebLogicによる分散化が可能かどうか? ④.NET Frameworkとの相性について知りたい4. ログ関連①JVM起動時の標準出力ログの「推奨される」ローテーション方法②障害の切り分けを、迅速に行うためにはどのログから確認すべきか知りたい。5. パスワード①WebLogic管理者パスワード失念時のリセット方法6. WebLogic Server 12.1.2関連①WebSocketやHTML5との連携②先日リリースされたWebLogic Server 12.1.2 からインストーラ等がOUIになりましたが、注意点などあれば教えてください7. 開催案内①WebLogic Server勉強会のEメールが来たり来なかったりします。 まとめ今回の「第38回WebLogic Server勉強会@東京」は前半後半を通して「WLST特集」の勉強会となりました。前半の岡田さんセッションではWLSTの基本をしっかりマスター、後半の山田さんのLTではJythonの言語仕様の説明、再利用性・保守性の高いWLSTスクリプト開発を行うための機能や注意点の説明がありました。ぜひ、WLSTをマスターして効率の良いWebLogic Sreverアプリケーションの開発や運用を心掛けてください。前半資料:「使ってみようWLST」(日本オラクル オラクルユニバーシティ 岡田 大輔)後半資料:「一歩先に進むためのWLST活用技法」(伊藤忠テクノソリューションズ株式会社ソフトウェアサービス本部 ミドルウェアサポート部 山田 貴裕氏)また、「お悩み相談室」は参加型のコーナーですので、日頃、現場で悩んでいることがあればご質問をどんどんください。また、会場内の参加者の皆さまからの経験談やアドバイスもお願いします。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 7月23日に開催された「第38回WebLogic Server勉強会@東京」の後半のセッションをレポートします。Lightning Talksでは、伊藤忠テクノソリューションズ株式会社ソフトウェアサービス本部 ミドルウェアサポート部の山田 貴裕氏が「一歩先に進むためのWLST活用技法」で、WebLo...

05. コラム - WebLogic勉強会 通信

使って見ようWLST

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。7月23日に開催された「第38回WebLogic Server勉強会@東京」の前半の「使ってみようWLST」(日本オラクル オラクルユニバーシティ 岡田 大輔)セッションをレポートします。WLST(WebLogic Scripting Tool)はWebLogic Serverシステム管理者オペレータが運用管理業務で有用なツールです。初心者向けにWLSTの基礎からTIPSや注意点などを岡田さんが解説しました。ぜひ、WLSTをマスターしてアプリケーションのデプロイや監視、運用管理に活用し、効率の良いシステム監視・管理を実践してください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)WLSTとはWebLogic Scripting Toolの略でWebLogic ドメインの作成、管理、監視に使用できるコマンドライン・スクリプト環境です。WebLogic Server 9.x以降から提供されています。この環境は、Javaのスクリプト・インタプリタであるJythonをベースにしています。WLSTでは、ローカル変数、条件変数、フロー制御文など、標準のJython機能に加え、WebLogic Serverに固有の一連のスクリプト機能(コマンド)を使用できます。WLSTはJythonの言語構文に従って個々のニーズにあわせて拡張できます。 WLSTのオンライン使用WLSTを使用して実行中の管理サーバに接続し、アクティブなWebLogicドメインの構成の管理、ドメイン内のリソースに関するパフォーマンス・データの参照、またはセキュリティ・データの管理(ユーザの追加、削除など)を実行できます。(WLSTを使用して管理対象サーバにも接続できますが、管理対象サーバの構成データは変更できません。)WLSTオンラインはJava Management Extensions (JMX)クライアントとして動作します。JMXクライアントは、リソース用に管理インタフェースを使用しながら管理対象Bean (MBean)のサーバのメモリー内コレクションと対話します。WLSTのオフライン使用WLSTは、実行中のWebLogic Serverインスタンスに接続せずに、ドメイン・テンプレートの作成、既存のテンプレートに基づいた新しいドメインの作成、または既存のアクティブでないドメインの拡張を実行できます。一点注意点があります。オフラインによる編集は、実行中のサーバによって無視されるので、WLSTオンラインやWebLogic Server管理コンソールなどのJMXクライアントによって上書きされる場合がありますので、アクティブなWebLogicドメインの構成を管理する際にはWLSTオフラインを使用しないことをお薦めします。対話モード、スクリプト・モードおよび組込みモード 対話モード対話モードは、コマンド・ライン・プロンプトにWLSTコマンドを入力しレスポンスが表示される実行方法です。対話モードは、スクリプトを構築する前にツールについて学習したり、コマンド構文を試作したり、構成オプションを確認したりするのに役立ちます。対話形式によるWLSTの使用は、特に構成に重要な変更を加えた後、即座にフィードバックを取得するのに有用です。スクリプト・モード拡張子.pyの付いたテキスト・ファイル(たとえば、filename.py)にWLSTコマンドを記述して、ユーザからの入力を必要とすることなく、WLSTコマンドのシーケンスを呼び出す実行方法です。スクリプト・ファイルをJythonコマンドと共に使用してスクリプトを実行します。組込みモード組込みモードでは、Javaコード内でWLSTインタプリタをインスタンス化し、それを使ってWLSTコマンドおよびスクリプトを実行します。対話モードおよびスクリプト・モードで使用するWLSTコマンドおよび変数はすべて、組込みモードで実行可能です。WLSTとMBeanWebLogic Serverのリソース(構成情報、監視情報)はJMX(Java Management Extension)ベースで管理されています。JMX管理対象オブジェクトを管理対象Bean(MBean)と呼びます。 MBeanの理解が重要MBeanを理解するためには、属性や階層関係を把握しておく必要があります。MBeanの属性や階層関係は、製品ドキュメントなどを参照してください。有効利用のためにはどこに情報があるのかを把握して置くことが不可欠になります。 WLST操作の基本的な流れ ① サーバに接続 ② 操作目的に応じてツリー(MBeanサーバ)を移動③ 目的のコマンドを実行- ロックして編集- 管理対象サーバー作成- 保存- アクティブ化WLSTコマンド制御・参照・情報に関数WLSTコマンドを下図のとおり。編集、ライフサイクル、ノードマネージャ、デプロイメントに関するWLSTコマンドは資料を参照ください。 TIPSとMBeanの調べ方TIPSとして「管理ポートを使用する場合のWLST接続」の説明がありました。管理ポートを有効化した場合、全ての管理トラフィックは管理ポート(SSL)を経由してアクセスする必要があります。また、コマンドラインツールでSSL接続を行う場合は起動オプションでキーストアを指定する必要があります。詳細は資料参照ください。MBeanの調べ方として、WLST lsコマンド、WLST findコマンド、JRockit Mission Control、config.xmlから推測する方法、監視ダッシュボード、WebLogic Server MBean Referenceを活用する方法の紹介がありました。まとめWLSTスクリプティングは定型化された管理タスクを実行する際に効果を発揮します。セッションの中で紹介された「ロックしているユーザを確認」、「ThreadPoolRuntimeMBeanの監視」、「JMSリソースの作成」でWLSTの活用方法を復習してください。また、下記のサンプルスクリプトも参考になると思います。 ■WLST オンラインサンプル  $WL_HOME/samples/server/examples/src/examples/wlst/online ■WLSTオフラインサンプル  $WL_HOME/common/templates/scripts/wlst管理コンソールのスクリプト記録機能で作成されるスクリプトファイルも実践的なスクリプトの良い参考になるでしょう。今回の資料「使ってみようWLST」を参考にして、効率の良いシステム監視・管理をおこなうためにWLSTをマスターし活用していただければ幸いです。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 7月23日に開催された「第38回WebLogic Server勉強会@東京」の前半の「使ってみようWLST」(日本オラクル オラクルユニバーシティ 岡田 大輔)セッションをレポートします。WLST(WebLogic Scripting...

01. 特集 - WebLogic Server

三菱UFJインフォメーションテクノロジーが挑む、企業システムにおける「WebSocket」の活用──「オラクル ミドルウェア フォーラム 2013 東京」レポート

いよいよ正式リリースされたJava EE 7では、新たにHTML5の中核技術の1つである「WebSocket」がサポートされ、Webアプリケーションにおいてクライアント/サーバ間の効率的な通信が可能となった。このWebSocketの業務システムへの適用にいち早く取り組んでいるのが三菱UFJインフォメーションテクノロジーだ。2013年5月30日に開催された「オラクル ミドルウェア フォーラム 2013 東京」における同社 黒田雄一氏の講演から、三菱UFJインフォメーションテクノロジーにおけるWebSocket活用の取り組みの概要を紹介する。(編集部)業務システムで求められるリアルタイム通知機能をWebSocketで実現する Webブラウザをクライアントとして情報の入出力を行うWebアプリケーションが企業情報システムの主流を占めるようになって久しいが、その基本的な構成要素であるHTML周辺の技術は現在も進化を続けている。最新版となるHTML5では、クライアント/サーバ間の効率的な通信を実現する技術としてWebSocketが取り込まれ、先ごろ正式リリースされたJava EE 7でもこれをサポート。これにより、Webアプリケーション開発の世界に新たな時代が訪れようとしている。 日本オラクルが開催したオラクル ミドルウェア フォーラム 2013 東京では、このWebSocketをエンタープライズ・システムの領域でどのように活用できるかについて、実際に業務システムへの適用を進める中で得られた知見を披露するセッションが実施された。その「今話題のHTML5技術『WebSocket』の業務への活用」と題されたセッションで壇上に立ったのが、三菱UFJインフォメーションテクノロジー ITプロデュース部の黒田雄一氏だ。氏は、業務課題に対するソリューションとしてWebSocketの利用を検討する背景、WebSocketに対する期待と、現在の課題および対応方法について解説を行った。三菱UFJインフォメーションテクノロジー ITプロデュース部の黒田雄一氏 黒田氏が所属するITプロデュース部は、企業システムに有用なさまざまな新技術の検証と評価、そしてグループ企業への導入推進を主な役割としている。その取り組みの中で近ごろ実施したのが、WebSocketの検証と業務システムへの適用である。 セッションの冒頭、黒田氏はWebブラウザ/サーバ間でリアルタイム通信を実現するためのプロトコルであるWebSocketの概要を説明した。 今日、一般的に行われているHTTP通信が1回ごとに完結するやり取りの連続で成り立つ"ステートレス"な通信であるのに対して、WebSocketは、例えば「電話」のように一度接続を確立したら一連の通信が完了するまで状態を維持することのできる "ステートフル"なプロトコルである。また、HTTP通信がWebブラウザからサーバへの一方向通信であるのに対し、WebSocketでは双方向通信が行えるのも大きなポイントだ。これにより、サーバからWebブラウザへのプッシュ配信が可能となり、サーバ負荷およびネットワークの帯域幅を節約できる点が大きな利点となる。 このWebSocketの特性を生かした適用領域として、一般には株価などの時価の配信やモバイル端末への配信サービスなどがアイデアとして挙げられるが、現在、適用を検討しているのはそうした領域ではないと黒田氏は語る。 「新規サービスなどのユーザー規模が大きくない領域では、従来の技術を使う場合と比べてどう良いのかを明確に示しにくい。したがって、むしろ対象ユーザー規模が大きく、従来の技術ではROI(投資対効果)を出すのが困難な領域に適用できないか考えた」(黒田氏) 三菱UFJインフォメーションテクノロジーでは、このWebSocketの特性を生かし、現在使用している事務アプリケーションへの適用を想定し研究開発を行っている。システムのWebアプリケーション化によりサービス・レベルが低下していた領域、具体的には事務拠点と事務センター間における「リアルタイム通知機能」を再度強化できないか検討している。 1990年代から2000年代前半までのクライアント/サーバ・システムの時代には、クライアント機能はクライアントOS上で動作するクライアント・アプリケーションとして実装されるのが普通であった。 しかし、その後に訪れたWebアプリケーションの隆盛により、クライアント機能はWebブラウザ上に表示されるコンテンツとして提供されるスタイルが一般化する。これにより、「クライアント・アプリケーションの配布や管理が不要になる」、「アプリケーションがサーバ側に集約されるため、運用管理が効率的に行える」などメリットも多かったが、一方、Webブラウザが実現できる範囲を超えたサービスを提供したければ、FlashやJava、ActiveXコンポーネントなどのプラグインの力を借り、"標準外"として対応する必要があった。 そうした機能の1つがリアルタイムの通知機能である。業務アプリケーションに求められるものの1つであり、クライアント/サーバ時代には実現できていた同機能は、Webアプリケーション時代にはWebブラウザの標準機能では対応が難しく、結果として積み残されていた課題の1つだったのである。 しかし現在では、HTML5の関連技術として標準化が進められてきたWebSocketを実装するWebブラウザも増えてきている。そこで黒田氏らは、この技術を利用した通知機能を改めてWebアプリケーションに実装するという取り組みを行ったわけだ。業務システムにWebSocketを適用する際の3つの検討ポイント 黒田氏は、この取り組みの中で見えてきた、業務システムにWebSocketを適用する際のポイントおよび検討事項として、次の3点を挙げる。(1)WebSocketに未対応のWebブラウザがまだ存在する(2)ステートレスを基本とするWebシステムのアーキテクチャと相性が悪い(3)プロトコル仕様が特殊なため、負荷分散処理の構築に注意が必要となる(1)WebSocket未対応ブラウザへの対応 1点目の「Webブラウザ側のWebSocket対応」について、黒田氏はPCとスマートフォン向けに提供されている各WebブラウザのWebSocket対応状況をまとめた表を示した。 WebSocketに対応しているInternet Explorer(IE)はバージョン10以降だが、業務で使われるIEはバージョン9以下であるケースがまだ多い。今回はWebSocket接続を実現するFlashコンポーネントを使うことでこの問題に対応している。 「WebSocket未対応ブラウザについては当面Flashを使い、クライアント環境がバージョンアップされてWebSocket対応となった際には、Flashを取り除くかたちでスムーズな移行が行えるようになる」(黒田氏)(2)ステートレスなWebアーキテクチャとWebSocketの共存 2つ目の検討事項の本質は、システム上で異なるアーキテクチャの共存をどのように行うかという課題だ。 前述したように、HTTPによる通信を前提としたWebアプリケーションはステートレスが基本であり、一方でWebSocketを採用したシステムはステートフルが前提となる。このことにより、負荷分散やサーバのリソース管理などの点で、考え方や手法に違いが生じる。 この課題については、WebSocket接続を行う通知機能に特化した汎用基盤を、従来のWebアプリケーション基盤と分けて独立させることで対応した。これにより、既存のWebアプリケーションを大きく改変せずにWebSocketを活用できたという。(3)負荷分散処理への対応 3つ目の検討事項は、WebSocketプロトコル独自の仕様に対応した負荷分散の仕組みが必要になる点だ。ステートフル通信であるWebSocket通信は、ステートレス通信であるHTTP通信とは根本的に異なるため、それに対応した負荷分散製品が必要となる。今回は例として、オープンソースの「HAProxy」、「nginx」、およびF5ネットワークスが提供する商用製品「BIG-IP」が紹介された。 BIG-IPについては、オープンソース製品と比べてコストが高くなるものの、開発/提供元によるサポートが受けられ、さらに負荷分散機構として高速かつ高機能だというメリットがあること、三菱UFJインフォメーションテクノロジーでも利用実績があることが説明された。黒田氏は、「オープンソースと商用製品のどちらを使うかは、案件ごとに要件や規模に応じて選択するとよい」とアドバイスする。 最後に黒田氏は、「今回の取り組みを通じて、Webアプリケーション化に伴って切り捨てられてしまったリアルタイム通知機能の実現におけるWebSocketの有効性について検討を進めており、日本オラクルと共同で製品検証を行っている。今回説明した内容はこうした検討の中で得られた知見であり、今後WebSocketに取り組む方にとって参考になればと思う」と語って説明を締めくくった。WebLogic Serverは次期バージョンでいち早くWebSocketに対応 黒田氏に続いては、日本オ��クル Fusion Middleware事業統括本部 ビジネス推進本部製品戦略部で国内におけるWebLogic Serverの提供を企画する新井庸介氏(シニアマネジャー)が登壇し、WebLogic ServerにおけるWebSocket対応状況を紹介した。 WebLogic Serverでは、間もなくリリース予定のバージョン12.1.2より、WebSocketへの対応が実現する。加えて同バージョンでは、アプリケーション・サーバに対してデータベース側から更新情報をプッシュし、ポーリングの負荷を軽減できる「TopLink Data Service」や、Oracle Databaseとの連携機能(JDBC Replay)などが提供される予定だ。 「TopLink Data Serviceを用いることで、エンド・ツー・エンドのプッシュ配信が可能になる。これにより、アプリケーション・サーバに加えてデータベースの負荷軽減も期待できるだろう。WebSocket対応に加えて、こうした付加価値機能の提供にも引き続き注力していきたい」(新井氏) 黒田氏も触れたように、日本オラクルでは、今回の講演テーマであるWebSocketに関して三菱UFJインフォメーションテクノロジーと共同で検証を行っている。従来の方法によるものと比べて、サーバの負荷やネットワーク・トラフィックの低減で実際に効果が見られるようだ。この検証結果については、いずれ一般に公開したいとのことである。 新井氏は、「皆さんもぜひ、WebSocketの活用など、最新のWebLogic Serverを利用した新しい取り組み、ビジネス展開、業務改革などイノベーティブな取り組みにチャレンジしてほしい。そうした取り組みを、ぜひ日本オラクルにバックアップさせていただきたい」と呼びかけて講演を締めくくった。

いよいよ正式リリースされたJava EE 7では、新たにHTML5の中核技術の1つである「WebSocket」がサポートされ、Webアプリケーションにおいてクライアント/サーバ間の効率的な通信が可能となった。このWebSocketの業務システムへの適用にいち早く取り組んでいるのが三菱UFJインフォメーションテクノロジーだ。2013年5月30日に開催された「オラクル ミドルウェア フォーラム...

07. イベント/セミナー

8/1(木) Oracle WebLogic Server 12c Forum 開催

最新のアプリケーション・サーバー情報をUS開発担当者が語るセミナーOracle WebLogic Server 12cに新たな価値が加わります。企業が求めるシステム基盤の堅牢性や運用管理の容易性に答え続けて来たWebLogic Serverが、今度はOracleDatabaseとの連携機能を強化し、Oracle Databaseを活用する企業システムにより高い価値を提供します。また、WebSocketを利用したシステム開発にも他テクノロジーではなしえない強力な付加機能が活用できるようになります。こうしたOracle WebLogic Server 12cの進化を本セミナーで具体的にご理解いただけます。オラクル米国本社より、製品を統括するマイク・リーマン、フランシス・ザオを迎えての基調講演とブレイクアウト・セッションは必聴です。また、製品の特長はデモンストレーションを通じてご説明し、すぐに、どう始めればよいかがご理解いただけます。Oracle Corporation,Fusion Middleware PrductManagement担当シニア・ディレクターマイク・リーマン■セミナー内容基調講演: WebLogic ServerとCoherenceの現在と未来、そして新たな取り組み」WebLogic Update 1: Oracle DB活用最前線:利用価値が向上!WebLogic-OracleDB連携機能」WebLogic Update 2: HTML5技術 “WebSocket” に対するWebLogicの取りくみ」2013年も半ばにさしかかった今、企業システムに新たな価値を提供する可能性を、WebLogicServerの新たな展開から見つけてください。皆様のご来場をお待ちしています。同日時、同会場で「Oracle Coherence 12c Forum 2013 」も併催されます。2013年8月1日(木)13:30~17:00 (受付開始 13:00~) オラクル青山センター〒107-0061 東京都港区北青山2-5-8詳細および登録は こちら から。

target="_blank">src="//cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/f4a5b21d-66fa-4885-92bf-c4e81c06d916/Image/c502f27ca2e77305b1cc46adca35600e/tweet_button.png"> 最新のアプリケーショ...

05. コラム - WebLogic勉強会 通信

Contexts and Dependency Injection(CDI)入門

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。6月20日に開催された「第37回WebLogic Server勉強会@東京」の後半の「Contexts and Dependency Injection(CDI)」(日本オラクル株式会社 Fusion Middleware事業統括本部 松林 晶)セッションをレポートします。今回はJava EE 6で仲間に加わったCDIがテーマです。DI(Dependency Injection)はJava EE 5でも利用できましたが利用は限定的でした。CDIは、DIをより汎用的にしたもので、アプリケーションのコンポーネント間を疎結合にすることができます。松林さんが入門者向けにCDIの基本概念から使用方法を紹介しています。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)CDIとは今回のテーマはCDIです。Java EE 6に組み込まれたJSR299: Contexts Dependency Injection仕様です。これまでのDependency Injection (依存性の注入)とAspect-Oriented Programming (AOP)のInterception技術がベースになって標準仕様として策定されたものです。CDI仕様の狙いは、アプリケーションのコンポーネント間を疎結合することです。プレゼンテーション層、ビジネスロジック層、インテグレーション層の各開発作業を並行して進めることができます。また、アノテーションを使用することで保守性に優れたシンプルなアプリケーション構築が行えます。インスタンスの依存関係やライフサイクルの管理は、すべてCDIコンテナが担当してくれます。 CDIを使用するための環境条件は2つまず1つ目はCDIコンテナ、すなわち、Oracle WebLogic Server 12cのようなJava EE 6をサポートしているアプリケーションサーバが必要です。2つ目はbeans.xmlファイルです。WebアプリケーションではWEB-INF/beans.xml、EJBではMETA-INF/beans.xmlファイルの存在有無によりCDI実行環境のオンオフが決まります。beans.xmlの中身は特別に指定するものが無ければ空で構いません。 Java EE 5のDI(Dependency Injection)Java EE 5でもDIの仕様が含まれていました。しかし、制限事項が多くアプリケーションはそれほどシンプルに開発できませんでした。例えば、注入する種別によってアノテーションが異なる(@EJB、@Resource、@WebServiceRef)など。 Java EE 6のCDIJava EE 6のCDIは、注入する種別が異なっても共通の@Injectアノテーションで注入が可能です。また、インジェクションする位置もメンバー変数や引数など自由度が増しアプリケーションを柔軟に開発できます。 @Qualifierでインジェクションの依存関係を決定下記の様に同じインタフェース定義を持つ実装クラスが複数ある場合は、カスタムの限定子@Qualifierを使用してインジェクション・ポイントをインジェクション対象クラスの両方に@JPNを付けて解決できます。 @Produceで動的に注入可能下記の様に動的に注入することが可能です。 インジェクション・オブジェクトのライフサイクルCDIではインスタンスの生成や破棄はコンテナが行います。インジェクション・オブジェクトのライフサイクルは下記のオプションで設定可能です。デフォルトは、バインドされたオブジェクトのライフサイクルと同じになります。 EL(Expression Language) 式からのアクセスEL式からアクセスできるのでJSFのManagedBeanの代わりにインジェクション・オブジェクトを使用できます。 まとめJava EE 6の仕様の一つであるCDIの特長を見て来ました。Java EE 5のDIや各種のAOPなどの機能がすっきりとまとめられたものです。DI, AOPを使用しているアプリケーションやフレームワークなどは今後、CDI仕様に基づくアプリケーション実装に変わっていくと思われます。この機会にCDIのアプリケーション開発にチャレンジしてください。本セッションの資料。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 6月20日に開催された「第37回WebLogic Server勉強会@東京」の後半の「Contexts and Dependency Injection(CDI)」(日本オラクル株式会社 Fusion Middleware事業統括本部 松林 晶)セッションをレポートします。今回はJava...

07. イベント/セミナー

WebLogic Server勉強会@東京:7月開催のお知らせ

2013年7月23日(火)に「第38回 WebLogic Server勉強会@東京」を開催します。Webアプリケーションの管理/監視において、繰り返し発生する作業を毎回手作業で行うと、作業効率が悪いだけでなく操作ミス等によるトラブル要因となり得るため、極力自動化が必要です。この課題を解消すべく、「Oracle WebLogic Server Scripting Tool(OracleWLST)」というコマンドラインのスクリプト機能が提供されています。コマンドや変数が用意されているほか、管理作業をスクリプトとしてまとめておけるので、管理作業を自動化できます。今月はこのWLSTの特集です。初めに「使ってみようWLST」で基本から応用まで解説します。次に、LightningTalksセッション+お悩み相談コーナーを通じて、Oracle WebLogic Serverの運用管理ノウハウを共有します。■「使ってみよう WLST」Oracle WebLogic Server ScriptingTool(WLST)は、コマンドラインからOracle WebLogicServerのMBeanを操作することができるツールです。本セッションでは、WLSTを使用して行う、Oracle WebLogicServerの設定、起動/停止などの制御、さらにモニタリング方法など、運用管理に役立つWLSTの活用方法を紹介します。■「Lightning Talksセッション」および「お悩み相談室」Oracle WebLogic Serverに関するLightningTalksセッションです。実際の現場でのノウハウが詰まった内容が毎回好評です。 現在、CTC山田貴裕氏による「WLST活用術(仮)」が予定されています。その他のスピーカーは調整中ですが、決まり次第、こちらのページにてアップデートいたします。「お悩み相談室」では、扱うOracleWebLogic Serverの運用や管理に関するご相談/ご質問を募集しています。イベント登録ページでの事前アンケートでお寄せください。第38回の様子:ご登録はお早めにどうぞ東京近郊の皆様、7月23日(火) には仕事を早めに切り上げ、午後6時30分にオラクル青山センターに集合しませんか?2013年7月23日(木)18:30~20:30 (受付開始 18:00~) オラクル青山センター〒107-0061 東京都港区北青山2-5-8詳細および登録は こちら から。

src="//cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/f4a5b21d-66fa-4885-92bf-c4e81c06d916/Image/c502f27ca2e77305b1cc46adca35600e/tweet_button.png"> 2013年7月23日(火)に「第38回...

05. コラム - WebLogic勉強会 通信

WebLogic Server Deployment Essentials

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。6月20日に開催された「第37回WebLogic Server勉強会@東京」の前半の「WebLogic Server Deployment Essentials」(日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔)セッションをレポートします。今回のテーマは「デプロイメント」です。デプロイメントは、WebLogic Serverの運用管理において重要な作業の一つです。効率的な運用管理を行うために、岡田さんがデプロイの基本からプロダクション再デプロイメントやFastSwapなどのデプロイメント機能の応用まで解説しました。この機会にWebLogic Serverのデプロイ機能をマスターしてください。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)目的今回のセッションタイトルは「WebLogic Server Deployment Essentials」です。日本語で表現すると、「WebLogic Sreverデプロイの要点」「~のポイント」、「~の勘所」でしょうか。WebLogic Serverのデプロイはいろいろ便利な機能が用意されています。WebLogic Serverの開発者、運用管理者のみなさん、この機会にもう一度、Weblogic Serverのデプロイの機能を整理してプロジェクトの要件にあった最適なオプションを選択し、効率良く運用してください。 デプロイメント、デプロイとは一般的にアプリケーションを実際に動作させるサーバマシン上にインストールし利用できる状態にすることです。開発中および終了後に共に使用します。開発中であればテストを目標として繰り返し実行することになるでしょう。その場合は、変更を加えたプログラムを効率良くデプロイしテストしたいものです。また、開発後にエンタープライズのアプリケーション本番環境、例えば、ドメイン内に複数のサーバマシンが配置され、複数のサーバに同じアプリケーションをデプロイするような場合は、各サーバ上に正しく確実に同じバージョンのアプリケーションがデプロイされなければなりません。さらに、アプリケーションのバージョンアップの際には、サービスを停止せずにアプリケーションを入れ替えることができればベストです。WebLogic Serverで提供されるデプロイメント機能WebLogic ServerのデプロイメントフェーズはアプリケーションをWebLogicドメインに登録するというフェーズと、対象指定されたサーバでアクティブにするフェーズの2段階に分かれています。第1段階はインストールで準備完了状態にすることで、アプリケーションをドメインに登録、アプリケーションのデプロイ対象指定(サーバー、クラスタ)を指定する処理です。第2段階は実際にアクティブ状態に変更するためのアクティベーション処理です。デプロイ対象でアプリケーションを起動することができるようになります。 WebLogic Serverは3種類のデプロイメント方法を提供1.コンソールデプロイメント2.コマンドラインデプロイメント3.自動デプロイメント (開発モードのみ)本番環境ではコンソール・デプロイメントとコマンドライン・デプロイメントを使用します。コンソールモードのデプロイはウィザード形式なので、対話型で条件を設定します。第1段階の「準備完了」状態ではクライアントはアクセスできないので、必ず、第2段階のアクティブ化の操作をお忘れなく。デプロイで使用できるコマンドは、weblogic.DeployerまたはWLSTの2種類あります。コマンドでは、第1段階はdistributeというアクションになります。第2段階��������startアクションです。コマンドを使用すると自由度が高まります。2段階デプロイではなく1回の操作でインストールから起動まで行うなど細かな制御が可能です。(つまり、distributeの後でstartする一連の動作を、deployコマンドひとつで同等の動作が可能)また、開発モードでは、自動デプロイメント機能も使用することができます。 ステージングの設定デプロイ対象のサーバにアプリケーションを配布する手順として、stage, nostage, external_stageの3種類のステージング・モードがあります。WebLogic Serverが管理サーバ上にコピーされたデプロイ対象のソースファイルをデプロイ先のターゲットであるデプロイ対象サーバ(通常、管理対象サーバ)にコピーしてくれるのがstageモード。デプロイ対象のソースファイルを管理サーバ、ターゲットサーバでアクセスできる共有ディレクトリ上に置き、デプロイ対象サーバが直接、共有ファイルにアクセスするのがnostageモード。管理者が手動操作でデプロイ対象サーバにインストールするのがexternal_stageモードです。配布するデプロイ対象ファイルが大きい場合は、nostageでインストールする方が効果的な場合があります。アプリケーションの要件を考慮して適切に設定ください。 応用編後半の応用編では、デプロイメントプラン、プロダクション再デプロイメント、FastSwapなど効率アップの機能があります。資料「WebLogic Server Deployment Essentials」の後半をご覧ください。【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 6月20日に開催された「第37回WebLogic Server勉強会@東京」の前半の「WebLogic Server Deployment Essentials」(日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔)セッションをレポートします。今回のテーマは「デプロイメント」です。デプロイメン...

02. 特集 - Java EE

あなたの “Java力”を試してみない? 「Javaパズラー」が帰って来た!──Java Day Tokyo 2013レポート

2013年5月14日に開催された「Java Day Tokyo 2013」において参加者の注目を集めたセッションの1つが「帰ってきたJavaパズラー」だ。もともとは本家JavaOneで人気を集めた参加型セッションであり、登壇者が出題するJavaコーディングに関するクイズに会場の参加者全員が答えていくというスタイルで進行する。果たして同セッションでは、どのような問題が出題されたのだろうか。その一部を紹介しよう。(川添貴生)JavaOneの人気セッションがJava Day Tokyo 2013に登場 「帰ってきたJavaパズラー」は、日本Javaユーザーグループ(JJUG)の協力によって実現したセッションである。グリーの岡崎隆之氏、JJUGの橋本吉治氏、日本オラクルの大渕雅子氏らが次々にクイズを出題し、それに対して参加者が挙手で回答するかたちでセッションは進められた。出題者の大渕氏、岡崎氏、橋本氏(写真左より) クイズの内容は、提示されたコードを実行した結果がどうなるのかを4択から選択するというものであり、すべての設問に"Java SE 8"などのバージョン指定がある。参加者は短い時間でコードの内容を読み取り、実行結果を予想しなければならない。 それでは、具体的にどのような問題が出題されたのだろうか。以下に当日の出題から2つを抜粋して紹介しよう。クラスBigDecimalのメソッドequalsの理解度を試す問題 1つ目は、クラスBigDecimalのメソッドequalsの理解度を試す問題だ。出題されたのは貸借対照表に関するコードで、総資産(equity)と負債(liabilities)を足した額が純資産(asset)と等しければ1カウントされるという内容である。 このコードでは、Java SE 8で新たに導入されるラムダ式が使われている。内容は、純資産と総資産、負債の値が納められた2つのコレクションをストリームに変換して、並列実行を許可しつつ、フィルタを使って条件に合致するストリームを取り出してカウントし、最後にカウント数を出力するというものだ。このコードを実行して得られる結果は、果たして「0」、「1」、「2」、「不定」のどれだろうか。 ここでのポイントは、クラスBigDecimalの値の扱いである。最初のコレクションでは純資産として「"100"」が代入されており、総資産と負債を足した値は「100.00」になっている。次のコレクションは純資産が「"10000"」、総資産と負債を加算した結果は「10000」となる。 実は値の比較でクラスBigDecimalのメソッドequalsを使用した場合、小数点以下の桁数も比較対象になる。つまり、2つ目のコレクションの純資産「"10000"」と総資産「10000」は等しいと判断されるが、1つ目のコレクションの「"100"」と「100.00」は等しくないと判断されてしまうのだ。 例題では、フィルタの中でメソッドequalsを使っているため、2つ目のコレクションだけが等しいと判定されてカウントアップが行われ、結果として「1」が出力されることになる。ちなみに、メソッドcompareToを使用した場合、桁数を無視して値を比較することができる。switch���の盲点を突く問題 次の出題は、HTMLタグのHTML5での対応状況を出力するコードだ。Mapの中には「<Progress>」、「<tt>」、「<applet>」という3つのタグと、それぞれの対応状況(new=新規追加、deprecated=非推奨、removed=廃止)が入っている。その後、switch文で入力された文字列と一致するキーのデータを出力するという流れである。 このコードでポイントとなるのは、入力された文字列(出題ではapplet)が括弧でくくられていない場合、それを付加するためにメソッドdecorateを呼び出している部分だ。このメソッドでは、クラスStringBuilderを使い、入力された文字列の前後に括弧を付加している。 回答の選択肢として提示されたのは、「"<applet>はHTML5から削除されました"と出力される」、「何も出力されない」、「例外がスローされる」、「コンパイルエラー」の4つである。 それでは、コードの内容を検討していこう。 まず、このコードには明らかなミスがある。それは、switch文の各caseにbreak文がないことだ。これにより、想定した出力は得られないことから、まず「"<applet>はHTML5から削除されました"と出力される」という選択肢を除外できる。 次にコンパイルエラーの可能性を考えてみよう。可能性としてありうるのは、switch文で文字列を条件として指定している部分である。確かにJava SE 6まではswitch文の条件として文字列を使うことはできなかったが、Java SE 7からはそれが可能になっている。したがって、このコードはコンパイルエラーにはならない。暗黙変換が思わぬトラブルを引き起こす 残る可能性は「何も出力されない」と「例外がスローされる」のいずれかである。ここでメソッドdecorateを見てみると、クラスStringBuilderをインスタンス化している個所で、コンストラクタ呼び出し時にchar型となる文字列(<)を指定している。だが、クラスStringBuilderのコンストラクタにchar型はないので、結果として、文字を持たず、引数で指定された初期容量の文字列ビルダを構築するint型の「99」に変換されることになる。 その後にある、引数をシーケンスに追加するメソッドappendは正常に動作するので、nameの内容(applet)と「>」がシーケンスに追加される。これにより、最終的に「applet>」が戻り値となる。 ここで元に戻ってみると、Mapのstatusに「<applet>」はあるが、「applet>」はない。したがって、switch文の条件を「status.get(key)」としているが、対応するstatusがないためnullが返されることになる。 そして、ここが"味噌"なのだが、Javaの仕様ではswitch文の評価結果がnullである場合、例外NullPointerExceptionがスローされてしまう。 つまり、正解は「何も出力されない」ではなく、「例外がスローされる」である。 こうしたchar型からの暗黙変換によるミスは、静的解析ツールや統合開発環境(IDE)の警告をチェックすることなどで発見できるので、積極的に活用してほしい。また、switch文で文字列を利用する際にはnullチェックを行うようにすることも重要だろう。 以上、ここでは2つの問題に絞って紹介したが、帰ってきたJavaパズラー・セッションでは、参加者を悩ませつつも大いに参考になる問題が多数出題された。次回も開催されることがあれば、腕に覚えのある方はぜひご参加いただきたい。

2013年5月14日に開催された「Java Day...

02. 特集 - Java EE

最新Java EE環境への一刻も早い移行が、企業のエンタープライズ開発を危機から救う──Java Day Tokyo 2013レポート

企業のWebアプリケーション開発における基盤フレームワークの1つとして長い間利用されてきた「Struts 1」の開発が停止した今日、オープンソースなどによる独自フレームワークで対応してきた企業のシステム開発は、1つの節目を迎えたと言える。これまでオープンソース・フレームワークなどで補完してきた機能を標準仕様でカバーしたJava EE 6やJava EE 7など最新のJava EE環境への移行が、これから多くの企業で進められることになるだろう。2013年5月14日に開催された「Java Day Tokyo 2013」では、日本オラクルの大橋勝之氏が「エスケイプ・フロム・レガシーJ2EE」と題して講演を行い、旧来のJava EEから最新のJava EEへの移行が求められる理由と、それによるメリットについて解説した。(編集部)Java EEはエンタープライズ開発の危機を救う日本オラクル コンサルティングサービス統括 テクノロジーソリューションコンサルティング統括本部クラウド&ITソリューションコンサルティング本部 ソリューションマネージャーの大橋勝之氏 Java SEからJava Embedded(組み込みJava)まで、幅広い領域におけるJavaの最新動向をカバーしたJava Day Tokyo 2013において、エンタープライズ開発にフォーカスしたJava EEに関するセッションの1つとして、日本オラクルでJavaに関するコンサルティング・サービスを提供する大橋氏が講演を実施。エンタープライズ開発において、J2EE 1.4など旧来のJava EE環境から最新のJava EE環境への移行が急がれる背景と、それがもたらすメリットを説明した。 大橋氏は冒頭、エンタープライズJavaプラットフォームの進化の歴史を振り返った。1999年末にリリースされた最初のバージョンであるJ2EE 1.2より、堅牢性やWebサービスなどエンタープライズ・システムに求められる機能を貪欲に取り込むかたちで進化してきたJava EEだが、2006年にリリースされたJava EE 5からは、AOP(アスペクト指向プログラミング)、CoC(Conventions over Configurations:設定から規約へ)、DI(Dependency Injection:依存性の注入)といった最新のコンセプトや技術を取り入れ、より開発生産性や柔軟性の高いプラットフォームとして進化してきた。今年6月にリリースされるJava EE 7は、その最新の成果となる。 大橋氏は、こうしたJava EE自体の進化と比べると、「日本のエンタープライズ開発の現場は大きく変わっていない」と嘆く。多くの開発現場で、いまだに旧式のJava EEが主流を占めている背景には、企業が独自の開発スタイルやアーキテクチャを持ち、 "車輪の再発明"や独自実装に固執して変化を嫌う風潮があるからだと看破し、そのために「プラットフォームは進化しているのに、業務としての開発は、以前と比べてあまり効率的なものになっていない」(大橋氏)と指摘する。 こうした現場の状況は、「日本のエンタープライズ開発にとっての危機だ」と大橋氏は警鐘を鳴らす。 「日本のエンタープライズ開発は、一部の優秀な技術者によって支えられているという現実がある。今、彼らに大きな負担がかかっている。時代遅れのガバナンス、業務の中で旧態依然とした技術としか向き合えないといった状況では、新しい技術や考え方を取り入れ、技術者個人としての価値を継続的に高めていきたいという彼らの欲求には応えられない。このことは結果的に、エンタープライズ開発の現場から優秀な技術者を流出させてしまうことにつながる」(大橋氏) 企業がJava EEへの移行を進めることは、このような状況を変えるためにも意味があるのだ。 最新の標準技術であるJava EEを使うことで得られるメリットとして、大橋氏は大きく次の4つを挙げる。 ● システム開発のガバナンス強化 ● 技術者の業務に対する満足度向上による、定着促進と作業品質の向上 ● 社内技術者のスキル向上の容易化 ● 外部からの技術者調達の容易化 特に「技術者の業務に対する満足度向上」という観点からは、グローバルで通用する標準技術としてのJavaEEのスキルを高めることにより、「技術者個人としての価値を向上させられる」ことと、「開発生産性の向上によって業務を従来よりも大幅に効率化できる」ことが、優秀な人材の流出を防ぎ、成果物の品質を高めるための大切な要素になる。Java EEのメリットを生かすための3つのポイント 続いて大橋氏は、企業が旧式のJava EE環境から最新のJava EE環境への移行を進めるにあたり、最初に念頭に置くべき「3つのポイント」を示した。それらのポイントとは、「(1)DRY化促進による運用維持コストの削減」、「(2)JSFによるコンポーネント・ベース開発」、「(3)CDIによるコンポーネントの疎結合化」である。 「(1)DRY(Don't Repeat Yourself)化促進による運用維持コストの削減」とは、最新のJava EE環境への移行により、旧式のJava EEをベースにした開発における、さまざまな"重複"のコストを削減していくという視点だ。 大橋氏によれば、旧Java EEベースの開発を続けていくことで、「サードパーティ製のJava EEフレームワーク」と「非標準のAPIをベースにした独自の業務フレームワーク」の間で重複が発生し、特にプラットフォーム更改時などに検証や対応のコストが高くなりがちになるというデメリットが生じる。最新のJava EE環境への移行は、そうしたフレームワークの重複管理の手間をなくし、なおかつ既存のアプリケーション資産を保護するうえでも有効なのだ。 「最新のJava EE対応アプリケーション・サーバの上では、J2EE 1.4ベースのアプリケーションを動作させることが可能だ。これにより、最新のプラットフォーム上で実行することによる性能向上などのメリットを享受できる。【関連記事】●Java EE 6環境のメリットをいち早く手軽に享受! 旧Java EEシステムを"そのまま"最新環境に移行する「Java EE 6マイグレーション・コンサルティングサービス」の魅力【前編】●Java EE 6環境のメリットをいち早く手軽に享受! 旧Java EEシステムを"そのまま"最新環境に移行する「Java EE 6マイグレーション・コンサルティングサービス」の魅力【後編】 また、Java EE 6以降ではWebアプリケーション・フレームワークが標準機能として取り込まれているので、既存のアプリケーションを動かしつつ、今後開発するシステムについては最新のJava EEへの対応を意識することにより、全体としての生産性向上と運用維持コスト削減の両立が可能になる」(大橋氏) 具体的には、新規に作るWebアプリケーションについては、リクエスト処理フロー制御で最新のJava EEの標準機能だけを使うように構成すればよい。これにより、更改まで手を付けずにおきたいJ2EE 1.4アプリケーションを動かしつつ、容易かつ徐々に最新のJava EE環境へ移行していけるようになる。 なお、移行を進める際には、「開発基盤側で用意すべき機能は何か」、「Java EEの標準技術をどう使うか」、「標準技術で足りない機能をどう補完するか」、「今後の周辺環境の変化にどう対応していくか」といったことを含む、エンタープライズ開発に関する戦略の見直しを行うことが重要になる。JSFによるコンポーネント・ベース開発で生産性を向上 「(2)JSFによるコンポーネント・ベース開発」に関しては、ユーザー・インタフェース(UI)フレームワークとしてのJSFの活用が鍵になる。大橋氏は、「日本では、Strutsや、それに類似したカスタム・フレームワークからの脱却に前向きでないことが、最新のJava EEへの移行を阻害する要因の1つになっている」と指摘する。 「実際に現場の方に話を伺うと、『このままではダメで、いつかは変えなければいけない』と感じている方が多い。それでも踏み切れない理由としては、『慣れ』、『新たな技術の習得にかかるコスト』、『(国内における)導入事例情報の少なさ』などが挙げられる。 もっとも、こうした理由からSIerの皆さんが及び腰な一方で、ユーザー企業の中には最新のJava EEへの移行に積極的なところが出てきている。その背景には、運用維持のコストの削減や開発のグローバル化への対応などのニーズがあるようだ」(大橋氏)【関連記事】●"いま"そして"これから"のJava EEに、開発者はどう取り組むべきか?【前編】──「WebLogic Server 12c Forum 2013」レポート●"いま"そして"これから"のJava EEに、開発者はどう取り組むべきか?【後編】──「WebLogic Server 12c Forum 2013」レポート また、2013年4月にStruts 1の開発停止がアナウンスされたことも、企業が早急に最新のJava EE環境への移行を進めるべき理由の1つだ。 Java EEの1要素であるJSFは、画面上にUI部品を配置し、それにJavaクラスのフィールドとメソッドをマッピングしていくことで生産性の高い開発が行えるコンポーネント・ベースのフレームワークである。JSFを採用することで、「煩わしいHTTPリクエスト処理の実装が不要となり、開発やテストが容易に行える」、「コンポーネントの再利用が容易になる」といったメリットを受けられる。 最新のJSF 2.xはWebアプリケーション・フレームワークに必要とされる機能を標準で備えており、これを活用してStrutsなど旧式のフレームワークからの移行を進めることで、Java EE開発の生産性を大幅に高められるのである。【関連記事】●「Webアプリケーションのモバイル/スマート・デバイス対応も見据え、まずはフロントから」──伊賀敏樹氏(いがぴょん)がJava EE 6への移行をすすめる理由 「パフォーマンス面でJSFに不安を感じるという方もおられるようだが、大規模でスケーラビリティが求められるシステムでは、必要に応じてJAX-RSでアクション・ベースに処理を実装できる。アクション・ベースであっても、コンポーネント・ベースであっても、現在のJava EEにはエンタープライズ・アプリケーションの開発に必要な機能が標準機能としてひととおり備わっている。これらを利用して、徐々にレガシーな環境をなくしていくことが、将来的な維持コストの削減につながる」(大橋氏)CDIで標準技術ベースのコンポーネント化を促進 最後の「(3)CDIによるコンポーネントの疎結合化」で挙げられたCDI(Contexts and Dependency Injection)は、Java EEに標準で備わるDI機能だ。これを活用することで、J2EE 1.4のようにサードパーティのプロダクトを使うことなくコンポーネント化を促進し、フレームワーク実装への依存性を弱めることが可能になる。また、バグの局所化やテストの容易化、コンポーネント単位での置き換えなどへの対応も可能になる。 大橋氏は、CDIを使うことのメリットとして、「業務アプリケーションにフレームワークの部品をインジェクト(注入)することで、フレームワーク実装への依存性を下げ、APIは維持しつつ、さらに周辺技術の変化に対応するかたちで、注入したコンポーネントだけを後から変更することが可能になる」と説明する。 CDIでは、インジェクトされるインスタンスはコンテキストで管理される。具体的には、スコープ内で初めのインジェクト時にインスタンスが生成され、スコープの終わりに解放されるという動作となり、同一のスコープ内であれば同じインスタンスが注入される。そのため、同一スコープ内でのインスタンスの再利用を意識する必要はない。 またCDIでは、インスタンスの動的な取得が可能であることを利用し、監視情報のイベントを送出したり、フレームワーク部品のパラメータを動的に変更したりすることなどが可能になるという。これらの特性を活用することで、JavaEEアプリケーションの開発やメンテナンスがさらに容易になるのだ。現場の課題を解決する機能は、すでに最新のJava EEに用意されている 大橋氏は最後に、まとめとして「3つのポイント」を振り返りながら���「これらはJava EEの要素の一部に過ぎないが、この3つを押さえておけば、Java EE開発の導入としては十分。そこから先の段階に進んでいくことができる」と語り、次のような言葉で講演を締めくくった。 「私は、盲目的に『Java EEを使ってほしい』と言うつもりはない。しかし、実際に最新のJavaEEは、皆さんの現場が抱える課題を解決するためのさまざまな機能を備えている。今、自社の現場が抱える課題の解決に使えると感じたら、すぐにでも最新のJava EEへの移行を進めてほしい。そして、来年のJava関連イベントでは、ぜひ皆さんのJava EE導入事例を発表して、それを広くシェアしていただきたい。それが、Java EEのさらなる発展につながり、また他のユーザーにとっても大きなメリットになる」(大橋氏)

企業のWebアプリケーション開発における基盤フレームワークの1つとして長い間利用されてきた「Struts 1」の開発が停止した今日、オープンソースなどによる独自フレームワークで対応してきた企業のシステム開発は、1つの節目を迎えたと言える。これまでオープンソース・フレームワークなどで補完してきた機能を標準仕様でカバーしたJava EE 6やJava EE...

05. コラム - WebLogic勉強会 通信

第36回WebLogic Server勉強会の資料を活用しよう!

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。5月23日に開催された「第36回WebLogic Server勉強会@東京」の資料がSlideShareにアップされています。皆様ご存知でしょうか?「今日から始めるトラブルシューティング - Flight Recorder入門」(日本オラクル オラクルユニバシティ 岡田 大輔)セッション、「WebLogic Server の開発モードと本番モード」(CTC 山田 貴裕氏)セッション、それから「Java EE7 Java Batch API」(日本オラクル Fusion Middleware事業統括本部 松林 晶)セッションです。簡単にセッションのキーポイントを挙げて見ました。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)「今日から始めるトラブルシューティング - Flight Recorder入門」WebLogic Server上のアプリケーションのスローダウンや異常終了など想定外の不具合が発生した場合は原因の分析や対処が必要になります。本セッションでは、岡田さんから一般的なトラブルシューティングの概要と、Flight Recorderを使用したトラブルシューティング手法について紹介してもらいました。 トラブルシューティングの方法について、その準備(情報収集の種類、方法など)から実際にツールを使用して分析する方法などが説明されました。1.WebLogic Serverが提供する様々な情報を活用する2.ログ情報3.JVMのスレッドダンプ4.診断イメージキャプチャ5.Flight Recorder記録など。詳細は「今日から始めるトラブルシューティング - Flight Recorder入門」をご確認ください。「WebLogic Server の開発モードと本番モード」 Lightning Talksセッションのトップバッター、CTCの山田 貴裕氏から、WebLogic Serverの開発モードと本番モードの違い、効率アップの方法についての解説がありました。 単一サーバドメインでアプリケーションを開発するケースでは、開発モードのみが提供しする下記の便利な機能を活用できます。1.ドメインディレクトリのautodeployディレクトリに置いたファイルは展開形式、アーカイブ形式どちらでも管理サーバにデプロイされます。2.FastSwapデプロイは、展開形式のクラス変更を動的に実行する機能でアプリ開発が効率アップ3.CLASS_CACH環境変数をtrueにして起動すると高速で起動する4.Classloader Analysis Tool (CAT)でクラスのロード/コンフリクト状況を確認できる5.WebLoigcテストクライアントを使用してWebサービスのテスト効率をアップ6.特定セッションのデバッグが可能(開始、終了の制御)山田さんの資料は、「WebLogic Server の開発モードと本番モード」Java EE7 Java Batch API松林さんからJavaを使ったバッチアプリケーションの開発と運用の標準化を目指した新しい仕様「JSR 352: Batch Applications for the Java Platform」の説明をしてもらいました。 この機能を使用すると、バッチの下記の特性を活用したアプリケーションの構築が可能になります。1.実行順序制御、チャンク処理2.チェックポイント3.エラー処理(リトライ・スキップ)4.並列実行・条件分岐松林さんの資料は、「Java EE7 Java Batch API」です。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 5月23日に開催された「第36回WebLogic Server勉強会@東京」の資料がSlideShareにアップされています。皆様ご存知でしょうか?「今日から始めるトラブルシューティング - Flight Recorder入門」(日本オラクル オラクルユニバシティ 岡田 大輔)セッション、「WebL...

02. 特集 - Java EE

スペシャリストが“IDE愛”を熱く語った! 「Eclipse」、「IntelliJ IDEA」、「NetBeans」を勧める理由──Java Day Tokyo 2013レポート

Java開発者に人気の高い統合開発環境(IDE)である「Eclipse」、「IntelliJ IDEA」、そして「NetBeans」。日本オラクルが2013年5月14日に開催した「Java Day Tokyo 2013」では、EclipseのスペシャリストであるNTTデータ先端技術の竹添直樹氏、IntelliJ IDEAのスペシャリストである日本ユニシスの今井勝信氏、NetBeansのスペシャリストであるJavaコミュニティ@九州のきしだ なおき氏の3名が集結。Twitter4J.orgの山本裕介氏をモデレーターに、それぞれのIDEの魅力を大いに語った。(編集部)プラグインでどんどん機能を拡張できる点がEclipseの魅力山本裕介氏Twitter4J.org主催。Twitter APIのJava向けライブラリ「Twitter4J」やトラブルシューティング・ツール「侍」などを開発するOSSディベロッパー。講演や執筆なども精力的に行っている。 Java開発において、多くの開発者がIDEを利用している。今日、その代表的な存在と言えるのが、Eclipse、IntelliJ IDEA、NetBeansだ。Java Day Tokyo 2013におけるパネル・ディスカッション「Java IDE の最新トレンド」は、モデレーターの山本氏による「今日は日本を代表するIDEのスペシャリスト3名に集まってもらい、それぞれのIDEの最新機能やトレンド、魅力を紹介してもらう」という挨拶でスタートした。Eclipse、IntelliJ IDEA、NetBeansの魅力を語ってくれたスペシャリストの方々。写真左より、竹添氏、今井氏、きしだ氏 口火を切ったのは竹添氏だ。氏は、「Eclipseとの出会いは10年ほど前になる。当初はテキスト・エディタでJava開発を行っていたが、Windows開発者がVisual StudioなどのIDEを使ってコーディングしているのを見てうらやましく思っていた。Java IDEにも無償のForte for JavaやJBuilderなどがあったが、当時のPCはRAMが128~256MB程度で、これらのIDEはとても満足に動かせなかった」と振り返る。竹添直樹氏NTTデータ先端技術所属。Eclipse関連の記事を雑誌に寄稿したり、Eclipseのプラグインを開発したりしている。著書に「Scala逆引きレシピ」(翔泳社刊)などがある。 「Visual CaféというWindowsネーティブのIDEもあり、こちらは少ないRAMでもサクサクと動いたが、商用製品であり、金額的に個人が購入できるツールではなかった。そこで、いくつか無償のIDEを試してみたが、いずれも『どこか違う』と感じた。自作をすることも考えたが、IDEを1人で作れるわけもなく、途方に暮れていたところにEclipseが登場した」(竹添氏) EclipseはIDEであり、またプラグインを追加してさまざまなツールを実現するための汎用プラットフォームでもある。竹添氏は、「基本的な機能はオープンソースとして無償で使うことができ、さらに必要な機能をプラグインによって拡張できる。この『プラグインを開発してオープンソースとして公開する』というエコシステムが確立されている点が最大の特徴であり、魅力でもある」と説明する。 現在では商用のEclipseディストリビューションが登場したり、企業やオープンソース・コミュニティなどがパッケージ・ソフト用の開発ツールとしてEclipseを同梱したりしている。竹添氏によれば、「Eclipseは、毎年6月に定期的にバージョンアップされるので、開発計画を立てやすいというメリットもある」という。 山本氏が、「この中でEclipseを使っている方は?」と会場に問いかけると参加者の大半が挙手し、改めてその普及ぶりを印象付けた。意外に古株。Eclipseと同じ年に誕生し、無償版もあるIntelliJ IDEA今井勝信氏日本ユニシス所属。10年前にお小遣いでIntelliJ IDEAを購入。Twitterやブログなどで「IntelliJ IDEA、最高!」とつぶやいている。著書に「Jenkinsではじめるビルド職人入門」(技術評論社刊)」などがある。 一方、IntelliJ IDEAのスペシャリストである今井氏が、「IntelliJ IDEAを使ったことがある方は?」と問いかけると、約3分の1の来場者が挙手。今井氏は、「IntelliJ IDEAを約10年使ってきたが、これまでに出会ったユーザーはわずか2人。実は今日も、ここに呼ばれたのは何かの冗談だと思っていたが、実際に使ったことのある方がこんなにいるとは驚いた」と話し、会場の笑いを誘った。 IntelliJ IDEAは、チェコに本社を置くJetBrainsが開発したIDEだ。当初はJava専用のIDEとして作られたが、現在ではScala、Groovy、Kotlinなど、さまざまなプログラミング言語に対応しており、無 償の「Community Edition」と有償の「Ultimate Edition」が提供されている。 IntelliJ IDEAの歴史は意外に古く、Eclipseと同じ2001年に最初のバージョンがリリースされている。英語版のみが提供され、有償であることから、近年まで日本ではあまり知られていなかった。だが、「Community Editionが登場したことや、Scalaへの対応が早かったことなどから、徐々に知られ始めた」と今井氏は説明する。 「私自身、英語は得意ではないが、英語版しかないからといって困ったことはこれまでに一度もない。皆さんもどんどん使ってみてほしい。Community Editionは使える機能が限定されているので、もし本気で使うのならUltimate Editionを購入していただくとよい」(今井氏)JavaのリファレンスIDEならNetBeans。初級者にもお勧め 続いてはNetBeansのきしだ氏だ。氏も同様に、来場者に対して「NetBeansを使っている方は?」と問いかけてみると、参加者の約3分の1が挙手。「IntelliJ IDEAと同じくらいの方が使っていて良かった」と笑顔を見せた。 きしだ氏がNetBeansを使い始めたきっかけは、少し変わっている。「Java開発ではなく、Javaを教える仕事でNetBeansを使ったのが最初」(きしだ氏)なのだという。きしだ なおき氏Javaコミュニティ@九州。福岡のフリー・プログラマー。NetBeansを使ったプログラミングや、NetBeansの記事執筆などを生業とする。著書に「創るJava」(毎日コミュニケーションズ刊)などがある。 「初めはコマンドラインでJavaを教えていたが、それではコンパイル・エラーをなくすまでに時間がかかってしまう。高いお金を払って講習を受けていただいているのに、多くの時間をコンパイル・エラーの解決に費やすのは申し訳ないと思った。何とかしたいと考え、当時はForte for Javaと呼ばれていたNetBeansを使うことにした」(きしだ氏) そのころ、すでにEclipseもリリースされていたが、「Eclipseは、手順を最短化するには、少しづらいと感じた」と、きしだ氏。Webアプリケーション開発についても、無償でJBuilderが提供されていたが、「Web開発ができて、なおかつ準備が少なくて済むという両方のメリットを兼ね備えていたのがNetBeansだった」(きしだ氏)と説明する。 NetBeansもチェコで誕生したIDEだが、すでに日本語対応がなされている。きしだ氏は、「NetBeansは、Javaのリファレンス・ツールのような位置づけで、Java EEに関してはIDEの中で最も対応が早い。Java EE 6やJava EE 7で開発を行う場合にはNetBeansを使うのが最適だと思う」と話す。好きなツールを使うのが一番。ただし、IDEの便利さも体験してほしい このように、3氏がそれぞれに推すEclipse、IntelliJ IDEA、NetBeansだが、Java開発ではどれを使うのが最適なのだろうか。しかも、選択肢はIDEだけに限らない。テキスト・エディタを使ってJavaコーディングを行う猛者もまだ存在する。これについて、「IDEは用途に応じて選べばよいが、テキスト・エディタを使っている人は"もったいない"と思う」と山本氏。それに対して、今井氏、きしだ氏、竹添氏は、それぞれ次のように応じた。会場の参加者はTwitterのつぶやきで"バトル"に参加 まず今井氏は、「IntelliJ IDEAには、『IntelliJ IDEA vim』という優れたプラグインがあり、これをテキスト・エディタとして使っている。また、Java EE開発ではNetBeansを使う。Eclipseに関しては、常に最低限の機能は使えるようにウォッチしているが、最近はついて行くのが大変で困っている。ただ、結局は1つで何でもこなせるのがIntelliJ IDEAのメリットだと思う」と語った。 一方、きしだ氏は、「テキスト・エディタにも、Javaコードの入力補助機能は用意されている。しかし、それでもIDEを使ってほしいと思う理由は、IDEがJavaのより良い書き方を教えてくれるから。例えば、NetBeansなら、InputStreamから処理を行ってcloseするまでのコーディングを『try-with-resourcesに変換』というメニューによって自動的にtry-with-resourcesに変換してくれる」とNetBeansの便利さを説いた。 そして竹添氏は、「IDEでも、テキスト・エディタでも、自分が好きなものを使うのが一番。ただし、私自身はテキスト・エディタでJavaコードを書くのは"苦行"に感じる。IDEには、Java開発をサポートしてくれるさまざまな機能が用意されているので、それらを試してみる価値はあると思う」とアドバイス。 このように、各氏が感じるIDEのメリットを聞いたところで、最後に山本氏が、「今日はそれぞれのスペシャリストがIDEに注ぐ "愛"が皆さんにも伝わったと思う。『好きなツールを使えばよい』というのはおっしゃるとおりだが、目的によっては適切でないツールもあるので、その点の見極めが重要だというのが共通の認識だろう。今後も、Twitterやブログ、セミナーなどを通して、各IDEの動向を紹介していきたい」と総括してディスカッションを締めくくった。

Java開発者に人気の高い統合開発環境(IDE)である「Eclipse」、「IntelliJ IDEA」、そして「NetBeans」。日本オラクルが2013年5月14日に開催した「Java Day...

02. 特集 - Java EE

JavaFXなら、Raspberry Piの上でもグラフィカルなアプリケーションが動かせる!──Java Day Tokyo 2013レポート

ARMプロセッサを搭載し、Linuxで動作する“手のひらサイズ”のシングルボード・コンピュータ「Raspberry Pi(ラズベリーパイ)」。今、密かに人気を集めるこのRaspberry Piの上でも、実はJavaFXアプリケーションを動かすことができる。日本オラクルが2013年5月に開催した「Java Day Tokyo 2013」において、米国オラクル・コーポレーション Javaテクノロジー・アンバサダーのステファン・チン氏らが、Raspberry Pi上によって広がるJavaFXの可能性をデモを交えて紹介した。(編集部)幅広い産業分野で浸透が進む組み込みJava Javaテクノロジーのアンバサダー(親善大使)として、またユーザー・インタフェース(UI)技術のスペシャリストとして、JavaOneをはじめ世界各国のJava関連イベントでJavaFXの普及拡大に向けた啓蒙活動を行うチン氏。Java Day Tokyo 2013では、立ち見が出るほどの盛況を博したセッション会場おいて、JavaFXで開発した既存のアプリケーションをRaspberry Pi上で動かすデモンストレーションを披露した。米国オラクル・コーポレーション Javaテクノロジー・アンバサダーのステファン・チン氏 講演の冒頭、チン氏は「現在、組み込みデバイスから情報家電、IT機器、さらに基幹システムまで、1つのテクノロジーでプログラムを実装することのできるJavaは、すでに30億を超えるデバイス上で稼働している」とJavaのカバー範囲の広さと普及度合いを強調。Javaが搭載されているデバイスについて次のように説明した。 「RFIDリーダーやパーキング・メーター、インテリジェント・パワー・モジュール、スマート・メーターなどの小さなデバイスから、ルータ/スイッチ、ストレージ・アプライアンス、ネットワーク管理、FA制御、セキュリティ・システムなどの中規模デバイス、そしてデジタル複合機(MFP)や現金自動受払機(ATM)、POSシステム、航空機内のエンターテインメント・システム、電子投票システム、医療画像システムなどの大規模システムまで、Javaは非常に幅広い分野で利用されている」  また、組み込み用途のJavaプラットフォームとしては現在、「Java ME Embedded」と「Java SE Embedded」が利用されているが、チン氏はJava ME Embedded 3.2を採用した最新のM2M(Machine to Machine)通信モジュールである「Cinterion EHS5」についても言及した。Cinterion EHS5は、幅広い産業用アプリケーションに安全な無線接続機能を提供する超小型の高速M2M通信モジュールだ。27.6ミリ×18.8ミリという小さなサイズでありながらJVM(Java仮想マシン)を搭載。既存の開発リソースを利用してM2Mアプリケーションの設計から開発、実行までを行い、開発期間を短縮できる点を特徴とする。  チン氏は、Cinterion EHS5の実物を持参しており、来場者1人ひとりに回して見せながら、「最後の人まで回ったら、最後は私のところに帰ってくると信じている」(チン氏)と会場の笑いを誘った。Java SE/JavaFXを実行可能なパワフルな性能を備えたRaspberry Pi さて、本題のRaspberry Piである。Raspberry Piは、英国のラズベリーパイ財団が開発したシングルボード・コンピュータだ。現在は25ドルの「Model A」と35ドルの「Model B」の2種類のバージョンが提供されている。 85.60ミリ×53.96ミリのボード上に、700MHzのARM11プロセッサと256MB(Model A)、または512MB(Model B)のメモリを搭載。OSとしてLinuxを採用し、USB 2.0、映像出力、音声出力、ネットワーク(Model Bのみ)などのポートを実装している。HDDは搭載していないが、SDメモリ・カードをストレージとして利用できる。また、ディスプレイ用のコネクタとカメラ用のコネクタも用意されている。 「Raspberry Piを利用するのに必要なのは、わずか3つのステップだ」とチン氏。まずステップ1では、Raspberry PiにLinuxをインストールする。次にステップ2では、Java 8 for ARM EAをダウンロードし、Raspberry Piにコピーする。最後にステップ3では、JavaFXで書いたアプリケーションをRaspberry Piにデプロイして実行する。この3つのステップは、講師であるチン氏のブログ「Steve On Java」の記事を翻訳した「Raspberry Pi で JavaFX - かんたん3ステップ」で詳しく紹介されている。 Raspberry Piにアプリケーションを実装するためには、まずJavaFXを入手する必要がある。JavaFXは、Java SE 7から標準で搭載されており、Windows環境、Mac環境、Linux環境で利用可能だ。また、統合開発環境(IDE)としてNetBeansやEclipse、IntelliJ IDEA、Oracle JDeveloperなどを使うことができる。使い慣れたIDEとJavaFX Scene Builderを連携させることにより、ビジュアルな環境でアプリケーションを容易に、なおかつ短期間で開発することが可能なのだ。 デモンストレーションは、米国オラクル・コーポレーションのJavaエバンジェリストであるアンジェラ・カイセド氏が担当。カイセド氏は、「Raspberry Piにタッチ・ディスプレイや9軸センサー・デバイスなどを接続してJavaFXで作ったアプリケーションをデプロイすることにより、タッチ・ディスプレイを傾けたり、回転させたりしながらキャラクターの居場所を変えたり、タッチ・パネルを指で操作してアイテムを使ったりする宝探しゲームのようなアプリケーションを容易かつ短時間で実現することができる」と話し、実際にそのアプリケーションをRaspberry Pi上で動かして見せた。 JavaFXのデモを披露するカイセド氏(写真中央) なお、紹介されたデモ環境では、Raspberry PiとJavaを連携させるためのライブラリを提供するプロジェクト「Pi4J」をベースに、GPIO(General Purpose Input/Output)とI2C(Inter-Integrated Circuit)に準拠したタッチ・ディスプレイ「Chalkboard Electronics Touchscreen」や9軸(ジャイロ、加速度、コンパス)センサー・デバイス「MPU-9150」などをRaspberry Piに接続し、JavaFXで開発したアプリケーションをデプロイしている。 参加者からの質問に答えるチン氏とカイセド氏 最後にチン氏は、「JavaFXは、リッチでグラフィカルなインタフェースにより、高速にアプリケーションを開発することができる。また、JavaFX Scene Builderを利用することで、アプリケーションをビジュアルかつ容易に開発することも可能だ。さらに、GPIOとI2Cを使用することで、さまざまなハードウェアを容易に統合することもできる。ぜひ今日からRaspberry Piを使ってJavaFXによるアプリケーション開発を楽しんでほしい」と語り、講演を締めくくった。

ARMプロセッサを搭載し、Linuxで動作する“手のひらサイズ”のシングルボード・コンピュータ「Raspberry Pi(ラズベリーパイ)」。今、密かに人気を集めるこのRaspberry Piの上でも、実はJavaFXアプリケーションを動かすことができる。日本オラクルが2013年5月に開催した「Java Day Tokyo...

02. 特集 - Java EE

Java EE 7新機能の目玉「WebSocket対応」、「バッチ処理」をアルン・グプタが解説──Java Day Tokyo 2013レポート

2013年6月にリリースされる「Java EE 7」では、さまざまな機能改善や追加が行われるが、それらの中で目玉となるのが、HTML5の構成技術の1つである「WebSocket」への対応と、バッチ処理のサポートだ。2013年5月14日に開催された「Java Day Tokyo 2013」の技術セッションにおいて、米国オラクル Javaテクノロジーアンバサダーのアルン・グプタ氏が、このWebSocket対応とバッチ処理について解説した。その主なポイントを紹介しよう。(編集部)WebSocket対応により、クライアント/サーバ間で双方向のプッシュが可能になる米国オラクル・コーポレーション Javaテクノロジーアンバサダーのアルン・グプタ氏 約1200名の参加者を集めて盛大に開催されたJava Day Tokyo 2013。そのメイン・セッション会場では、“Java EEの伝道師”とも称されるグプタ氏が、Java EE 7の目玉となる新機能「WebSocket対応」、「バッチ処理サポート」をテーマに講演を行った。 WebSocket対応について取り上げたのは、セッション「ここからはじめる、JSR-356 WebSocket」だ。同セッションでグプタ氏は、HTML5の主要な構成要素の1つであるWebSocketの意義や役割、そしてWebSocketを使ったWebアプリケーションの作成方法を説明した。 講演の冒頭、グプタ氏は現状のWebアプリケーションで使われているHTTP通信の仕組みについて「経済効率が非常に悪い」と指摘した。 「現状のHTTP通信では、クライアントがリクエストを要求すると、サーバがそれにレスポンスを返すだけ。クライアント側とサーバ側が交互にデータを送り合う半二重(Half Duplex)の通信方式であり、またレスポンス内にはたくさんのヘッダ情報が含まれており冗長性が高い。さらに悪いことに、中断したコネクションを再開するときには、一から接続をやり直さなければならない」(グプタ氏) こうしたHTTP通信の特性は、特に近年増加している“インタラクティブなWebサイト”を開発する際に大きな問題となりやすい。そこで、これまではServer PushやCometなどの技術を使い、開発者がこれらの問題に個別に対応していたが、グプタ氏によれば、それらは「標準的な方法がなかったがゆえのハックにすぎない」。そうした中、次世代Web開発の標準技術と目されるHTML5に双方向プッシュ技術として取り込まれたのがWebSocketなのである。 「WebSocketを使えば、クライアント/サーバ間で双方向の全二重(Full Duplex)通信が行える。クライアントからのリクエストを起点にし、それに対してサーバがレスポンスを返すという形式にこだわる必要もない。WebSocketが可能にすることで重要なのは、クライアント/サーバ間で行う一連のやり取りを単一のTCPコネクション内で行い、複数のメッセージがやり取りできるようになることだ」(グプタ氏)WebSocketによるWebアプリケーション開発のポイント このWebSocketを用いたWebアプリケーション開発のポイントは2つある。 1つ目はプロトコルだ。WebSocketのプロトコル仕様はRFC 6455で定義されているが、通信は最初の「ハンドシェイク(Handshake)」とその後の「データ転送(Data Transfer)」によって行われる。 2つ目はJavaScript API(WebSocket API)である。これは現在、W3Cで勧告候補(Candidate Recommendation)となっている。 グプタ氏は、WebSocketを使ったWebアプリケーション開発のデモを交えて、これら2つのポイントを解説した。 まずプロトコルだが、WebSocketによるクライアント/サーバ間通信では、初めに通常のHTTP通信によってコネクションを確立した後、使用プロトコルをWebSocketへとアップグレードする。具体的には、クライアントがサーバとHandshakeを行って通信を確立する際、HTTPヘッダで次のように「Upgrade: websocket」、「Connection: Upgrade」を指定すればよい。GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Origin: http://example.comSec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13 サーバがWebSocketに対応していれば、サーバはプロトコルをHTTPからWebSocketにスイッチするレスポンスを返す。HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Sec-WebSocket-Protocol: chat 以降は、GET、PUTといったHTTPのメソッドは無効となり、「http://」ではなく「ws://」で始まるURLによってクライアント/サーバ間がピア・ツー・ピアにつながり、コネクションをクローズするまでメッセージのやり取りを双方向で行えるようになる。  一方、2つ目のJavaScript APIについて、グプタ氏はWebSocket APIのインタフェースを示しながら、メッセージングはメソッドsendで行い、テキストのほかにBlob、ArrayBufferを送れること、エクステンションによって機能を拡張できることなどを説明した。【WebSocketのインタフェース】[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols)]interface WebSocket : EventTarget { readonly attribute DOMString url; // ready state const unsigned short CONNECTING = 0; const unsigned short OPEN = 1; const unsigned short CLOSING = 2; const unsigned short CLOSED = 3; readonly attribute unsigned short readyState; readonly attribute unsigned long bufferedAmount; // networking attribute EventHandler onopen; attribute EventHandler onerror; attribute EventHandler onclose; readonly attribute DOMString extensions; readonly attribute DOMString protocol; void close([Clamp] optional unsigned short code, optional DOMString reason); // messaging attribute EventHandler onmessage; attribute DOMString binaryType; void send(DOMString data); void send(Blob data); void send(ArrayBuffer data); void send(ArrayBufferView data);}; それでは、WebSocketを使うと、具体的にクライアント/サーバ間の通信はどの程度効率化できるのだろうか。グプタ氏は、メッセージ送信のパフォーマンスをRESTとWebSocketで比較した結果の例を示した。  それによれば、10バイトのメッセージを100回送信する程度ではRESTとWebSocketにそれほどの性能差は見られないが、100バイトのメッセージを1000回、1000バイトのメッセージを5000回などと増やしていくと、両者の間には数十倍の性能差が生じたという。例えば、1000バイトのメッセージを5000回送信した場合、RESTでは約55秒かかったのに対して、WebSocketでは約1秒で処理が完了した。 Java EE 7では、WebSocket対応機能がWebコンテナに統合され、非常に簡単に利用できるようになる。具体的には、サーバ、クライアントのプログラムに、それぞれ「@ServerEndpoint」、「@ClientEndpoint」というアノテーションを付加するだけでよい。【サーバ側のプログラムの例】import javax.websocket.*;@ServerEndpoint("/hello")public class HelloBean { @OnMessage public String sayHello(String name) { return “Hello “ + name; }}【クライアント側プログラムの例】@ClientEndpointpublic class HelloClient { @OnMessage public void message(String message, Session session) { // process message from server }}WebSocketContainer c = ContainerProvider.getWebSocketContainer();c.connectToServer(HelloClient.class, “hello”); また、メソッドに付加する主なアノテーションには、次のようなものがある。@onMessage:WebSocketのメッセージ・イベントを捕捉する@OnOpen:WebSocketのオープン・イベントを捕捉する@OnClose:WebSocketのクローズ・イベントを捕捉する グプタ氏は、実際にこれらを使った簡単なチャット・サーバのアプリケーションを作り、そのデモを披露した。【WebSocketを使ったチャット・サーバ・プログラムの例】@ServerEndpoint("/chat")public class ChatBean { static Set peers = Collections.synchronizedSet(…); @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } . . . @OnMessage public void message(String message, Session client) { for (Session peer : peers) { peer.getBasicRemote().sendObject(message); } }}【関連情報】JSR 356:Java API for WebSocketGlassFish 4(リファレンス・インプリメーテーションとしてWebSocketをいち早く実装)「Java Batch」でJava EEがいよいよバッチ処理に対応 グプタ氏が講師を務めたもう1つのセッション「Java プラットフォームにおけるBatchアプリケーション JSR 352」では、Java EE 7で追加される「バッチ機能(JSR 352:Java Bacth)」についての解説が行われた。 Java Batchを使用した典型的なアプリケーションのユースケースは、「インタラクティブではなく長い時間がかかるタスクで、何千ものデータベース・レコードを一気に書き換えるような処理」(グプタ氏)である。広いセッション会場はグプタ氏の解説を聞きに集まった多くの参加者で立ち見が出るほどの盛況を博した 「例えば、銀行などで、月末の締め日に10万以上の口座(アカウント)を対象にして勘定報告を作成するといったケースが想定される。この場合、1〜1万までの口座を1つ目のスレッドで、1万〜2万までの口座を2つ目のスレッドでといった具合に処理を分割し、複数のスレッドを同時に実行することでパフォーマンスを高めるといった使い方をする」(グプタ氏) Java Batchには、IBMのWebSphere Compute Grid技術のほか、Spring Batchの技術などが取り込まれている。コンセプトとしては、バッチ処理内で反復実行する「Job」に関する定義(Jobとは何か、どのようなStepがあるのかなど)を格納した「JobRepository」があり、JobRepositoryからJobの定義を「JobOperator」が取り出して「Step」として実行するといったかたちになる。Step内では、「ItemReader」、「ItemProcessor」、「ItemWriter」が、それぞれ「データの読み出し」、「データ処理」、「データの書き込み」を行う。  「例えば、口座ごとの勘定報告を作成し、それを顧客に電子メールで送信する場合、まず各口座から取引の情報を口座オブジェクトとして読み出して勘定オブジェクトを作り、それを計算して結果を渡す。読み出しはItemReaderで行い、ItemProcessorで処理して、その口座に関する情報をアグリゲートしたうえでItemWriterに書き込んでメールで送信するといった流れになる。このとき、読み出し(Read)、処理(Process)、書き込み(Write)を1つ1つ処理するのではなく、まとめてバッチで処理するところがポイントとなる」(グプタ氏) なお、Jobについては、1日1回実行するものに対してはJobInstanceが生成され、1日のうちに複数回のJobを実行する場合は、JobInstanceから複数のJobExecutionが生成される仕組みになる。  また、Stepには、「Chunk」と「Batchlet」という2つの方式がある。このうちChunk方式は、下図に示すようにRead、Process、Writeを1つのトランザクションとして扱う方式だ。  Jobの定義は「Job Specification Language(JSL)」というXML形式の言語によって記述する。このJobの定義において、タグchunk内でReader(Read処理を行う)、Processor(反復実行する処理を行う)、Writer(結果を書き出す)の実装と実行回数などを指定する。例えば、次の例ではReaderとして口座情報を読み込むaccountReader、Processorとして口座情報を処理するaccountProcessor、Writerとして電子メール送信を行うemailWriterを指定している。  「具体的な実装では、JPA(Java Persistence API)やJavaMailを使うことで、Java EEによるバッチ・アプリケーションを簡単に作ることができる」(グプタ氏) Java Batchの優れた点は、Jobの実行中に何らかの問題が生じた際、特定のポイントに戻ることのできる「チェック・ポイント機能」を備えているところだ。それぞれのChunk(1つのトランザクションに相当)からもチェック・ポイントに戻ることができ、例えばレコードに問題があり、ReaderがNullを返した場合には、そのレコードの処理をスキップして次のレコードの処理を継続する。また、ProcessorがNullを返した場合には、Writerによる書き込みだけをスキップすることもできる。いずれにせよ、バッチ処理全体を停止させることなく処理が行えるのだ。 さらに、例外処理については、例外が発生した場合にスキップしてもよい例外(skippable-exception)や、リトライする例外(retryable-exception)、ロールバックを行わない例外(no-rollback-exception)などを指定できる。どのレコードをスキップしたかのログを取得することも可能だ。 加えてグプタ氏は、スレッドを分けて並列実行する方法として「Partitioning」機能が用意されていることも紹介した。Partitioning機能では、テーブルをパーティションに分け、プロセッサ・コアごとにスレッドを割り振ることによって処理を高速化するという。 このほか、Java Batchには、Stepの実行順序をフロートとして決める「Flow」や、Flowのセットを並列で実行する「Split」、そしてChunk方式とは異なり処理の単位でタスクを実装するBatchlet方式などが用意されている。グプタ氏は、これらについて説明した後、GlassFish 4にもJava Batchが統合されることを紹介。最後に参加者からの質問に答え、「仕様や実装に対するリクエスト/フィードバックは常に歓迎しているので、ぜひ今回紹介した新機能を試し、それぞれのプロジェクトに対してコメントを寄せていただきたい」と呼びかけて講演を締めくくった。【関連情報】JSR 352:Java BatchGlassFish 4(リファレンス・インプリメーテーションとしてJava Batchに対応)

2013年6月にリリースされる「Java EE 7」では、さまざまな機能改善や追加が行われるが、それらの中で目玉となるのが、HTML5の構成技術の1つである「WebSocket」への対応と、バッチ処理のサポートだ。2013年5月14日に開催された「Java Day Tokyo...

02. 特集 - Java EE

Java EE 7で並列処理がケタ違いに速くなる! 使いこなしのポイントは?──Java Day Tokyo 2013レポート

Java EEにより、大規模な処理、高速な処理を行うシステムを開発している方に朗報だ。Java EE 7では、「Concurrency Utilities for Java EE」の導入により、マルチコア・プロセッサの能力を余すことなく引き出し、並列処理を格段に速く行えるようになる。2013年5月14日に開催された「Java Day Tokyo 2013」における日本オラクルのJavaエバンジェリスト、寺田佳央氏(製品事業統括 Fusion Middleware事業統括本部)の講演より、Concurrency Utilities for Java EEを使ううえでのポイント、注意点を紹介しよう。(編集部)Javaにおける非同期処理の歴史 Java Day Tokyo 2013において、「エンタープライズ環境における並列処理の実装方法について」と題したセッションの講師を務めた寺田氏は、Java EE 7から利用可能になるConcurrency Utilities for Java EE(JSR-236)の歴史や実装方法、ポイント、注意点などについて解説した。日本オラクル 製品事業統括Fusion Middleware事業統括本部 Javaエバンジェリストの寺田佳央氏 セッションの冒頭、寺田氏はJavaにおける非同期処理の歴史として、Java SE環境におけるスレッド処理の実装などの変遷を振り返った。 Javaは1996年に正式リリースされたJDK 1.0からマルチスレッドをサポートしており、2004年にJava SE 5でConcurrency Utilitiesを導入。これにより、並列処理やスレッド・プーリング、キューイングなどが簡単に実装できるようになった。  また、2011年にリリースされたJava SE 7ではFork/Joinに対応。さらに、2014年にリリース予定のJava SE 8ではラムダ式をサポートし、これまで以上に並列処理が簡単に記述できるようになるという。  このように、Javaにおける非同期処理の仕組みは着々と進化を続けているが、残念ながら開発の現場では、まだこれらの機能が十分に活用されていないと寺田氏は嘆く。氏はサンプル・コードを示しながら、「スレッド処理に関して、いまだにJavaの登場当初からのnew Thread(r).start(); などと書いているプログラムを多く見かけるが、もうこのような実装はやめたほうがよい」とアドバイスした。スレッドを無限に生成するこのコードでは、スレッドを生成する度にスタック領域が確保されてメモリを消費するほか、コンテキスト・スイッチも発生するため、パフォーマンスは決して良くならない。スレッド生成は処理コストが高く、こうした方法ではマルチコア・プロセッサ環境でその性能を十分に発揮できないのだという。  そこで現在、スレッドを直接生成する方法に代わって推奨されているのが、Java SE 5 から導入されたConcurrency Utilitiesである。Concurrency Utilitiesは並列処理の実装を簡素化するために導入されたAPIで、これを利用することによってスレッドのライフサイクル管理が簡単になるほか、スケーラビリティやパフォーマンスが大幅に向上するのだという。 それではConcurrency Utilitiesの導入により、パフォーマンスはどのくらい変わるのだろうか。寺田氏は、256個のプロセッサを持つ環境上で、シングルスレッド、マルチスレッド、Concurrency Utilitiesを使用してそれぞれどの程度パフォーマンスが変わるのかをグラフィカルに確認することのできるデモを披露した。このデモでは、シングルスレッドやマルチスレッドのプログラムが256個のうち一部のプロセッサしか利用できないのに対して、Concurrency Utilitiesを使った場合は256個のプロセッサの負荷がほぼ同時に限界まで達し、瞬時に処理を終えることが確認できた。  「Javaはパフォーマンスが悪いという声を聞くことがあるが、それは間違い。パフォーマンスが悪いのは、いまだに古いやり方でプログラムを書いているからにすぎない。Concurrency Utilitiesでマルチコア・プロセッサの能力をフルに使い切れば、Javaは驚異的なパフォーマンスを発揮する」(寺田氏)Java EE 7からサーバ・サイドでもConcurrency Utilitiesが使える 次に寺田氏は、Java EEにおける非同期処理の歴史を振り返る中で、1999年リリースのJ2EE 1.2で追加されたJava Message Service(JMS)、2001年リリースのJ2EE 1.3で追加された「Message-Driven Bean(MDB)」、さらには2009年リリースのJava EE 6で追加された「Async Servlet」、「Async EJB」について説明した。  JMSとMDBを使用すると、アプリケーション・サーバ管理者が事前にMQ用の接続を設定しておくことで、その設定情報をプログラマーがインジェクト(注入)してMQのプロバイダにアクセスするといったプログラミングが可能になる。  このJMSやMDBの実装は、Java EE 7にバージョンアップすることで「これまで以上に楽になる」と寺田氏は話す。また、Java EE 6で採用されたJava Servlet 3.0から、「asyncSupported = true」というアノテーションを付加することで非同期処理が行えるようになった。【Java Servlet 3.0におけるサーブレットでの非同期処理】@WebServlet(name = "MailSenderServlet", urlPatterns = {"/MailSenderServlet"},asyncSupported = true)public class MailSenderServlet extends HttpServlet { protected void processRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {AsyncContext ac = request.startAsync();ac.start(new MailSenderRunnable(ac));} EJB 3.1でも、POJO(Plain Old Java Object)に「@Stateless」というアノテーションを付加し、メソッドに「@Asynchronous」というアノテーションを付加すれば非同期で動作させられるという。【EJB 3.1における非同期処理】@Statelesspublic class SyncEmailSenderEJB { @Inject MailSender mailsend; public void syncSendMessage(String email){ mailsend.sendMessage(email); }@Asynchronouspublic void asyncSendMessage(String email){ mailsend.sendMessage(email); }} ただし、「このように簡単に実装できるようになるものの、これは単なる非同期処理であって、並列(Concurrency)処理ではないことを忘れないでほしい」と寺田氏は注意を促す。ここで氏は、同期処理と非同期処理の違い、そして並列処理と非同期処理の違いを説明した。 同期処理と非同期処理の違いの説明で寺田氏が用いたのは、iPhoneにメール・メッセージを送るEJBアプリケーションのデモである。 このデモで同期処理の場合には、メッセージの送信命令を実行した後にメール送信が完了するまで待ち続けることになる。その間、ユーザーにレスポンスを返すことはなく、結果として、ユーザーは処理が完了するまで画面を操作できなくなる。これに対して非同期処理の場合、メッセージの送信命令を実行した後、ただちに処理完了のレスポンスを返すことができるため、ユーザーはすぐに画面操作が行える。このとき、アプリケーションは非同期でメール送信の処理を行っている。 それでは、非同期処理と並列処理はどう違うのだろうか。寺田氏は、複数の旅行代理店に対してホテルの空室状況や飛行機の空席情報を検索するシステムを想定し、各旅行代理店に並列で検索要求を出し、検索が完了した順に結果を一覧表示するデモ・アプリケーションを披露した。このアプリケーションは、Concurrency Utilities for Java EEの技術に、同じくJava EE 7の新機能の1つであるWebSocket(JSR-356)の技術を組み合わせて実装されている。 非同期処理をJava EE 6で採用されたJava Servlet 3.0のAsync Servletを利用した場合、ユーザーが検索処理を実行すると、サーブレットのインスタンスから派生した別の非同期処理用のAsync Contextを生成して“単一の”非同期タスクを実行する。この非同期実行されるタスクでは、複数の旅行代理店に問い合わせを行う場合でも、それぞれの旅行代理店に対して順番に問い合わせる必要がある。言い換えれば、Java EE 6では非同期で処理は行えるが、非同期処理の実装で並列処理(新たなスレッドの生成)をサポートしていないため、タスクの実装では複数の旅行代理店に対して順番に問い合わせざるをえなかったのだ。 一方、並列処理では、上のような非同期処理を1つだけ実行するのではなく、複数のタスクを並列に同時実行することができる。したがって、複数の旅行代理店がある場合は、それぞれに対して一斉に並行して問い合わせることが可能となる。実際にデモの画面では、各旅行代理店から検索結果が返ってきた順に結果が表示された。 「Java EE 6までは、EJBコンポーネントやサーブレットの中から新しいスレッドを生成することは仕様として禁止されていた。新しいスレッドを作った場合、同じJVM上でスレッドが作られるものの、アプリケーション・サーバが管理するスレッドとは別のスレッドとして生成されるため、アプリケーション・サーバからそのスレッドを管理する手段がなかったのだ」(寺田氏)  したがって、新たに作ったタスクに対してコンテキスト情報やクラス・ローダ、セキュリティなどの情報を渡すことができず、さらに生成されたタスクからアプリケーション・サーバのリソースを呼び出すこともできなかった。加えて、「アプリケーション・サーバが停止、またはアプリケーションが無効化された場合でも、ライフサイクルが異なるために生成されたタスクは処理を続行してしまうといった管理不能の状態に陥る可能性もあった」(寺田氏)。 それに対して、Java EE 7で追加されるConcurrency Utilities for Java EEでは、APIを介してアプリケーション・サーバ内でタスク管理が行えるようになるのだ。 Concurrency Utilities for Java EEを使ううえでの4つのポイント こうして、これからはJava EE開発で並列処理にConcurrency Utilitiesが使えるようになるわけだが、「その使用に際しては、まずパッケージjavax.enterprise.concurrentに含まれる次の4つのインタフェースの特徴を押さえておいてほしい」と寺田氏は説明する。(1)インタフェースManagedExecutorService(2)インタフェースManagedScheduledExecutorService(3)インタフェースContextSerivce(4)インタフェースThreadFactory これらのうち、(1)と(2)は非常に簡単に非同期のタスクを利用できるインタフェースであり、(3)、(4)は使い方が少し難しいが、自分で並列処理をコントロールしたい場合に利用するインタフェースである。 最も簡単に並列処理を利用できるのは、(1)のインタフェースManagedExecutorServiceだ。このインタフェースを使う場合には、まずインタフェースRunnableかCallableをimplementsしたタスクを作成する。【インタフェースRunnableでタスクを作成】public class MyRunnableTask implements Runnable { @Override public void run() { try { Thread.sleep(10000); //何らかの処理 } catch (InterruptedException ex) { logger.log(Level.SEVERE, null, ex); } }} 続いて、サーバ側の設定を行う(デフォルト設定でも可)。  そして最後に、作成したタスクに対して「managedExecsvc.submit(task);」といったコードを実装するだけでよい。【非同期タスクを実行する EJBコンポーネント(サーバ側で設定したリソースをインジェクト)】@Statelesspublic class MyManagedExecutorService {@Resource(name = "concurrent/DefaultManagedExecutorService")ManagedExecutorService managedExecsvc; public void execExecutorService() { MyRunnableTask task = new MyRunnableTask();managedExecsvc.submit(task);      MyCallableTask singleTask =           new MyCallableTask("Foo Bar"); Future<String> singleFuture =managedExecsvc.submit(singleTask);} (2)のインタフェースManagedScheduledExecutorServiceを使う場合も同様で、まずタスクを作成してサーバの設定を行い、「managedScheduledExecsvc.schedule(task, 60L, TimeUnit.SECONDS);」」といったコードを実装するだけで、タスクのスケジューリング(ここでは1分後にタスクを実行)が可能になる。【非同期タスクを実行する EJBコンポーネント(1分後にタスクを実行する例)】@Statelesspublic class MyManagedScheduledExecutorService{ @Resource(name = "concurrent/ DefaultManagedScheduledExecutorService")ManagedScheduledExecutorService managedScheduledExecsvc; public void execScheduledExecutorService() { MyRunnableTask task = new MyRunnableTask();managedScheduledExecsvc.schedule(task, 60L, TimeUnit.SECONDS); } 上のコードは時間を指定してタスクを実行する場合の例だが、独自のトリガを指定することも可能であり、どのようなときにタスクを実行するのか、あるいはスキップするのかをプログラム側でコントロールすることもできる。【非同期タスクを実行する EJBコンポーネント(独自のトリガを指定)】@Statelesspublic class MyManagedScheduledExecutorService{ @Resource(name = "concurrent/ DefaultManagedScheduledExecutorService") ManagedScheduledExecutorService managedScheduledExecsvc; public void execScheduledExecutorService() { MyRunnableTask task = new MyRunnableTask(); managedScheduledExecsvc.schedule( task, new MyTrigger(new Date(), 10, 1000) } 大抵の場合は(1)、(2)の方法で目的を達せられるだろうが、Java SEで培った資産をJava EE環境で再利用したいといった場合、そしてConcurrency Utilities for Java EEの本質を理解するためには、以降で紹介する(3)、(4)の方法を理解することが重要だと寺田氏は語る。 (3)のインタフェースContextSerivceは、先のインタフェースManagedExecutorServiceやManagedScheduledExecutorServiceも内部的に使用しており、「Concurrency Utilitiesの肝になる部分」(寺田氏)である。Java EEのConcurrency Utilities for Java EE では、内部的にJava SEのパッケージjava.lang.reflectが提供するクラスProxyの動的プロキシ機能を使い、Java EE環境上で動作させるために必要なコンテキスト情報などを付加して実行する。オリジナルのタスクに対してコンテキスト情報などを付加することで、次のサンプル・コードのようにインタフェースManagedExecutorServiceの代わりに、Java SEで提供されるインタフェースExecutorServiceを利用することも可能になる。【コンテキスト付きタスクの実行(動的プロキシを生成)】@Statelesspublic class ContextServiceManager {@Resource(name = "concurrent/DefaultContextService")ContextService ctxSvc;  public void execSimpleContextService() { ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(threadFactory); MyRunnableTask task = new MyRunnableTask();Runnable proxiedTask =ctxSvc.createContextualProxy(task,Runnable.class); singleThreadExecutor.submit(proxiedTask);}} さらに、(4)のインタフェースThreadFactoryを使うことで、Java SEのパッケージjava.util.concurrentが提供するクラスThreadPoolExecutor (もしくはThreadPoolExecutorのユーティリティ・クラスであるExecutors)を使って独自のスレッド・プールを定義し、そこから新たなスレッドを生成することも可能だという。【カスタム・スレッド・プールからスレッドを生成】@Resource(name = "concurrent/ DefaultManagedThreadFactory")ManagedThreadFactory threadFactory;public void execThreadFactory() {  MyRunnableTask task = new MyRunnableTask();  ExecutorService exec =            new ThreadPoolExecutor(4, 4,           0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),            threadFactory);  exec.submit(task);} なお、Concurrency Utilities for Java EE 7を使う際の注意点として、「Java SE 7で提供されるFork/Joinのスレッド・プールは使えない」、「アプリケーション・クライアント・コン テナでは使えない」、「CDI(Contexts and Dependency Injection)では使用に制限がある」といったことが挙げられる。 最後に寺田氏は、「Concurrency Utilities for Java EE 7を使い非同期マルチタスクを並列に実行することで、計算機資源をより有効に活用できるようになる。Java EE環境で簡単かつ安心してスレッド生成が行えるようになり、柔軟性も非常に高いので、ぜひ皆さんもこの機能をフルに活用していただきたい」と呼びかけて講演を締めくくった。【関連情報】●寺田氏がセッションで使用したサンプルのソース・コード「ConcurrentUtil4EE」●JSR 236の関連ページ     http://jcp.org/en/jsr/detail?id=236    https://java.net/projects/concurrency-ee-spec

Java EEにより、大規模な処理、高速な処理を行うシステムを開発している方に朗報だ。Java EE 7では、「Concurrency Utilities for Java EE」の導入により、マルチコア・プロセッサの能力を余すことなく引き出し、並列処理を格段に速く行えるようになる。2013年5月14日に開催された「Java Day Tokyo...

04. 実践! Java EE 6

[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(9) CDI第2回

本連載では、Java Platform, Enterprise Edition 6 (Java EE 6) を実際の開発に活用していただくための情報をお届けしています。 今回も前回から引き続き Contexts and Dependency Injection for the Java EE platform(CDI)を取り上げます。 前回は、CDIの基本的な機能を単純なHelloプログラムにより確認しました。今回は、CDIの機能を利用して、シンプルなアプリケーションを作成します。単純なDIの利用だけではなく、インターセプターやデコレータ、イベント機能などを利用して、AOP的な認証認可の仕組みなども取り入れてみます。(日本オラクル Fusion Middleware 事業統括本部 二條智文)作成するアプリケーション今回作成するアプリケーションは、Longin画面からログインをし、Documentを作成・更新・削除する機能を持つとシンプルなアプリケーションです。まずは、CDIのInjectionの機能を利用し、以下の機能を持ったアプリケーションを作成してみます。作成するアプリケーション(クリックして拡大)ログイン機能(画面遷移)ログアウト機能(画面遷移)ドキュメントのロード機能ドキュメントの作成、更新、削除機能なお、今回は、アプリケーション作成の手順を主に説明します。上記アプリケーションは、CDI仕様書の「1.3. Introductory examples」に記述されているコードをアレンジした内容となっています。詳細を知りたい方は、実際に動作するアプリケーションと見比べながら、上記仕様書を参照するとわかりやすいと思います。今回作成するアプリケーションの完成版は、ここからダウンロード可能です。Step By Stepで開発手順を説明していますが、もしお時間がない場合は、こちらをダウンロードしてソースを見ながらお読みください。データベースの準備今回のアプリケーションはDBへアクセスし、ログイン情報や、ドキュメント情報、認可情報などを取得・更新します。そのため、アプリケーションで利用するDBの設定をしておきます。今回は、データベースにOracle Database Express Edition 11g Release 2(以下XE11g)を使用します。XE11gは、次のページ http://www.oracle.com/technetwork/jp/database/express-edition/overview/index.htmlよりダウンロードして、インストールしてください。インストール後に、今回のアプリケーション用のスキーマと、テーブルおよびデータを定義します。まずは、DBユーザを作成します。コマンドプロンプトで、以下のようにSQL*Plusを実行してください。> sqlplus / as sysdbaその後、以下のようにユーザを作成してください。-- cdiスキーマ作成CREATE USER cdi IDENTIFIED BY cdi;-- cdiユーザへのパーミッション付与GRANT RESOURCE, CONNECT TO cdi;次に、いくつかテーブルを作成します。上記のcdiユーザでログインし直してください。> sqlplus cdi/cdi次のSQLを実行してテーブルを作成します。Usersテーブルcreate table users ( username varchar2(20) NOT NULL, password varchar2(20) NOT NULL, banned number(1,0) NOT NULL, CONSTRAINT users_pk PRIMARY KEY (username));permissionsテーブルcreate table permissions ( id varchar2(10) NOT NULL, username varchar2(20) NOT NULL, action varchar2(20) NOT NULL, datatype varchar2(100) NOT NULL, CONSTRAINT permissions_pk PRIMARY KEY (id));Documentsテーブルcreate table documents ( id varchar2(10) NOT NULL, title varchar2(50) NOT NULL, text varchar2(255) NOT NULL, createdby varchar2(20) NOT NULL, CONSTRAINT documents_pk PRIMARY KEY (id));次のようにデータをinsertします。--Userデータinsert into users values ('duke','welcome1', 0);insert into users values ('candy','welcome1', 0);insert into users values ('oracle','welcome1', 1);-- permissionデータinsert into permissions values ('1', 'duke','save', 'cdisample.entity.Document');insert into permissions values ('2', 'duke','delete', 'cdisample.entity.Document');insert into permissions values ('3', 'candy','save', 'cdisample.entity.Document');commit;以上で、データベースの設定は終わりました。次は、WebLogic上にデータソースを作成しておきます。”demo/CDI”という名称のデータソースを作成してください。データソースの作成手順は、[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(4) JPA 第1回の”WebLogic Server の データソースの作成”の項を参照してください。アプリケーション開発の準備前回と同様に、CDIアプリケーション用のプロジェクトをEclipse上に作成します。前回の記事を参考にして、「CDISimpleApp」という名称の”Dynamic Web Project”を作成してください。また、前回と同様にCDI機能を有効化するために、WEB-INF直下にbeans.xmlファイルを配置します。「Project Facet」画面(クリックして拡大)今回は、JSFおよびJPAを利用するため、プロジェクトのFacetにこの2つを追加します。CDISimpleAppを右クリックし、Properties > Project Facetsを選択し、「Project Facets」画面で、”JavaServer Faces”および、”JPA”にチェックを入れてOKボタンを押してください。以上でアプリケーション作成の準備は完了です。アプリケーションの作成 - ログイン機能の実装それでは、まず、ログイン機能を実装していきます。作成するコードは以下になります。QuarlifierUsers.java: DBのUsersテーブルへアクセスを表すQuarilierDocuments.java: DBのDcumentsテーブルへのアクセスを表すQuralifier汎用ClassDatabases.java: JAP EntityManagerのDIを定義するクラスエンティティUser.java: JPAのUserエンティティモデルLogin.java: ログイン処理を実装するクラスCredential.java: 画面に入力したUsername/Passwordを保持例外NotLoggedInException.java: ログインしていない場合用の例外画面login.xhtml: ログイン画面documents.xhtml : ドキュメント編集画面まず、CDIで利用するQualifierを作成します。次のようなQualifierを2つ作成してください。package: cdisample.qualifierClass: Users.javapackage cdisample.qualifier;import java.lang.annotation.Retention;import java.lang.annotation.ElementType;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR})public @interface Users {}Package: cdisample.qualifierclass: Documents.javapackage cdisample.qualifier;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR})public @interface Documents {}JPAで利用するEntitiyManagerをCDIを利用して上記のQalifierで注入できるように以下のようなクラスを作成します。Package: cdisample.daoclass: Databases.javapackage cdisample.dao;import javax.enterprise.inject.Produces;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.PersistenceContext;import javax.persistence.PersistenceUnit;import cdisample.qualifier.Documents;import cdisample.qualifier.Users;//EntityManagerをDIするためのクラス、@Producesで定義public class Databases { @Produces @PersistenceContext @Users EntityManager userDatabaseEntityManager; @Produces @PersistenceUnit @Users EntityManagerFactory userDatabaseEntityManagerFactory; @Produces @PersistenceContext @Documents EntityManager docDatabaseEntityManager; }Userエンティティを作成します。以下のようなクラスを作成します。Package: cdisample.entity Class: User.javapackage cdisample.entity;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name="USERS")public class User implements Serializable { private static final long serialVersionUID = 1L; @Id private String username; private boolean banned; private String password; public User() {}// getter/setterをこれ以降に記述します}Psersistence.xmlを以下のように編集します。すべてを書き換えてください。Persisntence.xml<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="CDISimpleApp"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>demo/CDI</jta-data-source> <class>cdisample.entity.User</class> <properties> <property name="eclipselink.target-server" value="WebLogic"/> </properties> </persistence-unit></persistence>Login/Logout処理を実行するModelクラスを作成します。以下のクラスを作成してください。Package: cdisample.modelClass:Login.javapackage cdisample.model;import java.io.Serializable;import java.util.List;import javax.enterprise.context.SessionScoped;import javax.enterprise.event.Event;import javax.enterprise.inject.Model;import javax.enterprise.inject.Produces;import javax.faces.application.FacesMessage;import javax.faces.context.ExternalContext;import javax.faces.context.FacesContext;import javax.inject.Inject;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Parameter;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.persistence.criteria.Root;import cdisample.entity.User;import cdisample.exception.NotLoggedInException;import cdisample.qualifier.LoggedIn;import cdisample.qualifier.Users;@SessionScoped@Modelpublic class Login implements Serializable { @Inject Credentials credentials; // JSFの入力値をDI @Inject @Users EntityManager userDatabase; // EntityManagerをDI //クエリ用 private CriteriaQuery query; private Parameter usernameParam; private Parameter passwordParam; private User user; @Inject // Injectされてインスタンス化されるタイミングで、以下のメソッドがコールされる void initQuery(@Users EntityManagerFactory emf) { CriteriaBuilder cb = emf.getCriteriaBuilder(); usernameParam = cb.parameter(String.class); passwordParam = cb.parameter(String.class); query = cb.createQuery(User.class); Root u = query.from(User.class); query.select(u); query.where(cb.equal(u.get("username"), usernameParam), cb.equal(u.get("password"), passwordParam)); } public String login() { List results = userDatabase.createQuery(query) .setParameter(usernameParam, credentials.getUsername()) .setParameter(passwordParam, credentials.getPassword()) .getResultList(); if (!results.isEmpty()) { user = results.get(0); } else { FacesMessage msg = new FacesMessage("Invalid Username or Password"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, msg); return null; } return "documents"; } public String logout() { user = null; ExternalContext context = FacesContext.getCurrentInstance() .getExternalContext(); context.invalidateSession(); return "login"; } public boolean isLoggedIn() { return user != null; }// ログインユーザをDI可能にするために@Producesで定義 @Produces @SessionScoped @LoggedIn public User getCurrentUser() { if (user == null) { throw new NotLoggedInException(); } else { return user; } }}Package: cdisample.modelClass:Credentials.javapackage cdisample.model;import javax.enterprise.inject.Model;@Modelpublic class Credentials { private String username; private String password;// これ以降にGetter/Setterを記述}上記2つのクラスで使用している@Modelアノテーションは、CDIの組み込みタイプで、いわゆるMVCモデルのModelを表すアノテーションです。次に例外クラスを1つ作成します。Package: cdisample.exception/Class:NotLoggedInException.javapackage cdisample.exception;public class NotLoggedInException extends RuntimeException {}ここまでで、コンパイルエラーが無い状態になっていれば、問題ありません。次にJSFを利用してUIを作成します。ここでは、WebContentの直下にlogin.xhtmlとdocuments.xhtmlを作成します。login.xhml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CDI Sample App - Login</title></head><body> <f:view> <h:messages style="color: red" /> <h:form> <h:panelGrid columns="2" rendered="#{!login.loggedIn}"> <h:outputLabel for="username">Username:</h:outputLabel> <h:inputText id="username" value="#{credentials.username}" /> <h:outputLabel for="password">Password:</h:outputLabel> <h:inputSecret id="password" value="#{credentials.password}" /> </h:panelGrid> <h:commandButton value="Login" action="#{login.login}" rendered="#{!login.loggedIn}" /> </h:form> </f:view></body></html>documents.xhtml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CDI Sample App - Documents</title></head><body> <f:view> <h:messages style="color: red" /> <h:form> <h:panelGrid columns="1" rendered="#{login.loggedIn}"> <h:outputLabel>signed in as <h:outputText value="#{login.currentUser.username}" /> </h:outputLabel> </h:panelGrid> <h:commandButton value="Logout" action="#{login.logout}" rendered="#{login.loggedIn}" /> </h:form> </f:view></body></html>一旦この状態で、実行してみましょう。ログイン・ログアウト機能が利用できます。ログイン画面(クリックして拡大)Login.xhtmlを右クリックして実行してください。右のようなシンプルなログイン画面が表示されます。テストデータとして、usernameに”duke”、passwordに”welcome1”を入力して、Loginボタンを押してください。"signed in as duke"という画面が表示されれば正常に動作しています。アプリケーションの作成 – ドキュメント編集機能の実装次に、ドキュメントの編集機能を実装します。ここでは、以下のようなコードを作成します。エンティティDocument.java: JPAのDocumentエンティティデータアクセスDataAccess.java: DAOを表すインタフェースDocumentDataAccess.java: DocumentsテーブルにアクセスするDAOクラスモデルDocumentEditor.java: 画面からのDocument処理を実行するクラス画面documents.xhtml : ドキュメント編集機能の追加まずは、Documentエンティティを作成します。Package: cdisample.entity Class: Document.javapackage cdisample.entity;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name="DOCUMENTS")public class Document implements Serializable { private static final long serialVersionUID = 1L; @Id private String id; private String createdby; private String text; private String title; public Document() {}// getter/setterをこれ以降に記述します}Persistence.xmlに上記のエンティティを追加します。persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="CDISimpleApp"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>demo/CDI</jta-data-source> <class>cdisample.entity.User</class><class>cdisample.entity.Document</class> <properties> <property name="eclipselink.target-server" value="WebLogic"/> </properties> </persistence-unit></persistence>次に、Documentsテーブルのアクセス用にDAOクラスを作成します。まずは、データアクセスを汎用化するインタフェースを以下のように定義します。Package: cdisample.dao Class: DataAccess.javapackage cdisample.dao;public interface DataAccess { public T load(V id); public void save(T object); public void delete(V object); public Class getDataType();}次に、上記を実装したDocumentDataAccessクラスを作成します。Package: cdisample.dao Class: DocumentDataAccess.javapackage cdisample.dao;import javax.ejb.Stateless;import javax.inject.Inject;import javax.persistence.EntityManager;import cdisample.entity.Document;import cdisample.qualifier.Documents;@Statelesspublic class DocumentDataAccess implements DataAccess{ @Inject @Documents EntityManager em; public Document load(String id) { return em.find(Document.class, id); } public void save(Document document) { Document currentDocument = em.find(Document.class, document.getId()); if (currentDocument == null) { em.persist(document); } else { em.merge(document); } } public void delete(String id) { Document currentDocument = em.find(Document.class, id); if (currentDocument != null) { em.remove(currentDocument); } } public Class getDataType() { return Document.class; }}次に、画面から実行されるModelクラスを作成します。Package: cdisample.model Class: DocumentEditor.javapackage cdisample.model;import javax.enterprise.context.RequestScoped;import javax.enterprise.inject.Model;import javax.inject.Inject;import cdisample.dao.DataAccess;import cdisample.entity.Document;import cdisample.entity.User;import cdisample.qualifier.LoggedIn;@RequestScoped@Modelpublic class DocumentEditor implements java.io.Serializable { @Inject private DataAccess docEditor; // DAOをDI private String id; private String title; private String text; @Inject @LoggedIn private User currentUser; // ログインユーザをDI public void load() { Document document = docEditor.load(id); if (document == null) { document = new Document(); } title = document.getTitle(); text = document.getText(); } public void save() { Document document = new Document(); document.setId(id); document.setTitle(title); document.setText(text); document.setCreatedby(currentUser.getUsername()); docEditor.save(document); } public void delete() { docEditor.delete(id); id = null; title = null; text = null; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getText() { return text; } public void setText(String text) { this.text = text; }}最後に、JSFにドキュメント編集UIを追加します。Document.xhtmlを以下のように編集してください。document.xhtml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CDI Sample App - Documents</title></head><body> <f:view> <h:messages style="color: red" /> <h:form> <h:panelGrid columns="1" rendered="#{login.loggedIn}"> <h:outputLabel>signed in as <h:outputText value="#{login.currentUser.username}" /> </h:outputLabel> </h:panelGrid> <h:commandButton value="Logout" action="#{login.logout}" rendered="#{login.loggedIn}" /> </h:form> <h:form rendered="#{login.loggedIn}"> <h:panelGrid columns="3"> <h:outputLabel for="id">id:</h:outputLabel> <h:inputText id="id" value="#{documentEditor.id}" /> <h:commandButton value="load" action="#{documentEditor.load}" /> <h:outputLabel for="Title">Title:</h:outputLabel> <h:inputText id="Title" value="#{documentEditor.title}" /> <h:outputLabel for="Title"></h:outputLabel> <h:outputLabel for="Text">Text:</h:outputLabel> <h:inputTextarea id="Text" value="#{documentEditor.text}" /> <h:outputLabel for="Title"></h:outputLabel> </h:panelGrid> <h:panelGrid columns="2"> <h:commandButton value="save" action="#{documentEditor.save}" /> <h:commandButton value="delete" action="#{documentEditor.delete}" /> </h:panelGrid> </h:form> </f:view></body></html>(クリックして拡大)この状態で、login.xhtmlを実行してみて下さい。先ほどと同じようにログインすると、右のようなドキュメント編集画面が出ます。Load/save/deleteなどの機能が動作します。以上、CDIを利用したシンプルなアプリケーションを実装してみました。CDIを利用することで、スコープを意識せずに、@Injectするのみで必要なBeanにアクセスすることができ、コード同士を疎結合な状態にできることを体感できたと思います。セキュアなアプリケーションの実装(クリックして拡大)次のステップでは、先ほど作成したアプリケーションに、認可処理を追加して、セキュアなアプリケーションを実装していきます。認可処理には、インターセプター、デコレータなどの機能を利用し、業務ロジックには影響を与えずに、セキュアな実装を追加していきます。データアクセスの保護CDIのインターセプター機能を利用して、各種データアクセスを実行する際に、ログインユーザの状態を判断し、ユーザが無効であった場合はデータアクセスをはじくといった、データアクセスをセキュアに実行する機能を実装してみます。まずは、汎用的なログ出力のためのBeanを作成します。Package: cdisample.util Class: Loggers.javapackage cdisample.util;import java.util.logging.Logger;import javax.enterprise.inject.Produces;import javax.enterprise.inject.spi.InjectionPoint;public class Loggers {// LoggerをDIするための@Produces定義。引数のInjectionPointからクラス情報をセット @Produces Logger getLogger(InjectionPoint injectionPoint) { return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getSimpleName()); }}次に、インターセプター用のアノテーションを定義します。Package: cdisample.qualifier Class: Secure.javapackage cdisample.qualifier;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.ElementType;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.interceptor.InterceptorBinding;@InterceptorBinding@Inherited@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface Secure {}上記アノテーションを定義したインターセプタークラスを作成します。Package: cdisample.qualifierClass: Secure.javapackage cdisample.interceptor;import java.io.Serializable;import java.util.logging.Logger;import javax.inject.Inject;import javax.interceptor.AroundInvoke;import javax.interceptor.Interceptor;import javax.interceptor.InvocationContext;import cdisample.entity.User;import cdisample.exception.NotAuthorizedException;import cdisample.qualifier.LoggedIn;import cdisample.qualifier.Secure;@Secure@Interceptorpublic class AuthorizationInterceptor implements Serializable { @Inject @LoggedIn User user; //ログインユーザを取得 @Inject Logger log; // ログ出力用 @AroundInvoke public Object authorize(InvocationContext ic) throws Exception { if (!user.isBanned()) { // ユーザが有効な場合は、処理を続行 log.info("Authorized: " + user.getUsername()); return ic.proceed(); //インターセプトした処理を実行 } else { // ユーザが無効な場合は、Exceptionを投げる log.info("Not authorized: " + user.getUsername()); throw new NotAuthorizedException(); } }}例外クラスの作成Package: cdisample.exceptionClass: NotAuthorizedException.javapackage cdisample.exception;public class NotAuthorizedException extends RuntimeException { public NotAuthorizedException() { } public NotAuthorizedException(String action) { super(action); }}最後に、インターセプトしてセキュアにしたいクラスに@Secureアノテーションを付与します。以下のように、DocumentDataAccessクラスに@Secureアノテーションを付与します。Package: cdisample.daoClass: DocumentDataAccess.javapackage cdisample.dao;…略…import cdisample.qualifier.Secure;@Stateless@Securepublic class DocumentDataAccess implements DataAccess{ …略…}最後に、beans.xmlにインターセプターの定義を追記します。beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <interceptors> <class>cdisample.interceptor.AuthorizationInterceptor</class> </interceptors></beans>この状態で、login.xhtmlを実行してみます。ログインのusername/passwordは”oracle/welcome1”を入力してください。このユーザデータは無効フラグが立っているため、ログイン後にドキュメント編集画面で何らかのボタンを押すと、DocumentDataAccessを実行する処理がインターセプトされて、Exceptionがスローされます。その他のユーザでは、正常に動作することを確認してみましょう。このようにインターセプターを利用すると、業務ロジックに影響せずに、@Secureアノテーションを定義するのみでセキュアに処理を実行することが可能になります。データ操作に対する認可機能の追加インターセプター機能で実装したのは、ログインユーザが無効だった場合にすべてのデータアクセスを禁止するという処理でした。ここでは、デコレータ機能を利用して、データアクセスの更新・削除それぞれの操作ごとに認可する仕組みを入れ込んでみます。権限の無い操作をした場合は、エラーとなるようにします。まず、認可情報を保持するPermissionエンティティを作成します。Package: cdisample.entityClass: Document.javapackage cdisample.entity;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name="PERMISSIONS")public class Permission implements Serializable { private static final long serialVersionUID = 1L; @Id private String id; @Column(name="\"ACTION\"") private String action; private String datatype; private String username; public Permission() { } public Permission(String action, String datatype) { this.action = action; this.datatype = datatype; }// ここにgetter/setterを記述// action/datatypeのみで同値判定するhashCode/equalsを定義 @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((action == null) ? 0 : action.hashCode()); result = prime * result + ((datatype == null) ? 0 : datatype.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Permission other = (Permission) obj; if (action == null) { if (other.action != null) return false; } else if (!action.equals(other.action)) return false; if (datatype == null) { if (other.datatype != null) return false; } else if (!datatype.equals(other.datatype)) return false; return true; }}persistence.xmlに上記のエンティティを追加します。persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="CDISimpleApp"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>demo/CDI</jta-data-source> <class>cdisample.entity.User</class> <class>cdisample.entity.Document</class><class>cdisample.entity.Permission</class> <properties> <property name="eclipselink.target-server" value="WebLogic"/> </properties> </persistence-unit></persistence>次に、ログイン時に、CDIのイベント機能を利用して、セッションにログインユーザの認可情報を保持する機能を追加します。Package: cdisample.event Class: Permissions.javapackage cdisample.event;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.enterprise.context.SessionScoped;import javax.enterprise.event.Observes;import javax.enterprise.inject.Produces;import javax.inject.Inject;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Parameter;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.persistence.criteria.Root;import cdisample.entity.User;import cdisample.entity.Permission;import cdisample.qualifier.LoggedIn;import cdisample.qualifier.Users;@SessionScopedpublic class Permissions implements Serializable { @Produces // ログインユーザの認可情報をDIするための定義 private Set permissions = new HashSet(); @Inject @Users EntityManager userDatabase; Parameter usernameParam; CriteriaQuery query; @Inject // DI時にPermissionデータをDBから取得する処理 void initQuery(@Users EntityManagerFactory emf) { CriteriaBuilder cb = emf.getCriteriaBuilder(); usernameParam = cb.parameter(String.class); query = cb.createQuery(Permission.class); Root p = query.from(Permission.class); query.select(p); query.where(cb.equal(p.get("username"), usernameParam)); }// ログイン時のイベント処理により、DBより認可情報を取得する処理 void onLogin(@Observes @LoggedIn User user) { permissions = new HashSet(userDatabase.createQuery(query) .setParameter(usernameParam, user.getUsername()) .getResultList()); }}ログイン機能のログイン処理に、上記イベントを発火する処理を実装します。Package: cdisample.event Class: Permissions.java@SessionScoped@Modelpublic class Login implements Serializable { …略…// ログインイベントの注入@Inject @LoggedIn Event userLoggedInEvent; …略… public String login() { List results = userDatabase.createQuery(query) .setParameter(usernameParam, credentials.getUsername()) .setParameter(passwordParam, credentials.getPassword()) .getResultList(); if (!results.isEmpty()) { user = results.get(0);userLoggedInEvent.fire(user); // ログイン時にイベント発火 } else { FacesMessage msg = new FacesMessage("Invalid Username or Password"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, msg); return null; } return "documents"; }…略…上記により、ログイン時にイベントが実行され、セッション中に認可情報が保持され、セッション・スコープで認可情報にアクセスできるようになります。次に、データアクセスに対して認可処理を実行する汎用的なデコレータを作成します。Package: cdisample.decorator Class: DataAccessAuthorizationDecorator.javapackage cdisample.decorator;import java.io.Serializable;import java.util.Set;import java.util.logging.Logger;import javax.decorator.Decorator;import javax.decorator.Delegate;import javax.inject.Inject;import cdisample.dao.DataAccess;import cdisample.entity.Permission;import cdisample.exception.NotAuthorizedException;@Decoratorpublic abstract class DataAccessAuthorizationDecorator implements DataAccess, Serializable { @Inject @Delegate DataAccess delegate; // デコレータ用のdelgate定義 @Inject Logger log; @Inject Set permissions; // セッションに保持している認可情報をDI// save処理の認可処理 public void save(T object) { authorize("save"); delegate.save(object); }// delete処理の認可処理 public void delete(V object) { authorize("delete"); delegate.delete(object); }// 認可処理 private void authorize(String action) { Class type = delegate.getDataType(); if (permissions.contains(new Permission(action, type.getName()))) { log.info("Authorized for " + action); } else { log.info("Not authorized for " + action); throw new NotAuthorizedException(action); } }}最後に、beans.xmlにデコレータの定義を追記します。beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <interceptors> <class>cdisample.interceptor.AuthorizationInterceptor</class> </interceptors><decorators> <class>cdisample.decorator.DataAccessAuthorizationDecorator</class> </decorators></beans>これで、DataAccessインタフェースを実装しているすべてのクラスに対して、認可処理を追加することができます。(今回はDocumentDataAccessしか存在していませんが。)それでは、認可処理が正常に実行されるか試してみましょう。login.xhtmlを実行してみます。まずは、duke/welcome1でログインしてDocumentのsave/deleteを実行してみてください。この場合は、どちらも実行可能です。次に、一旦ログアウトし、candy/welcome1でログインしてみてください。Candyには、Permissionsテーブルにsaveの権限しか定義していないため、”delete”操作を実行しようとすると、NotAuthorizedExceptionが投げらて、実行されません。このように、デコレータを利用することで、各操作への認可処理をメソッド単位に実装できます。またその際に、もともとの業務ロジックには影響を与えません。以上で、CDIを利用したアプリケーションの作成は終わりです。まとめ今回はCDIの機能を利用して、簡単なアプリケーションを作成してみました。CDIを利用することで、コード間の依存性を低減し、疎結合なアプリケーションを作成することができました。また、インターセプターやデコレータなどの機能を利用することで、業務ロジックには影響せずに、認可処理を追加し、処理をセキュアにすることができました。このようにCDIを利用することで、DIだけではなく、Contextに紐付いたDI管理や、AOP的なコーディングなど様々なメリットが享受できることがご理解いただけたかと思います。今後の開発において、ぜひCDIを活用してみてください。連載の終りに今回を持ちまして、[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!は一旦終了いたします。ここまで読んでくださり、どうもありがとうございました。連載を通じて、Java EE 6の簡単開発を主眼に置いた機能を体験することができたと思います。これを機会に、皆様が携わる開発において、Java EE 6が一層利用されることを望んでおります。さて、Java EE仕様に目を落とすと、Java EE 7という新規仕様がもうじきリリースされます(2013/05現在)。Java EE 7に関しても、また別の機会に紹介していきたいと思いますので、お楽しみに!

本連載では、Java Platform, Enterprise Edition 6 (Java EE 6) を実際の開発に活用していただくための情報をお届けしています。 今回も前回から引き続き Contexts and Dependency Injection for the Java EE...

07. イベント/セミナー

WebLogic Server勉強会@東京:6月開催のお知らせ

2013年6月20日(木)に「第37回 WebLogic Server勉強会@東京」を開催します。今月は「WebLogic Serverデプロイメント・エッセンシャルズ」と「Contexts and DependencyInjection(CDI)入門」の2セッションです。■「WebLogic Serverデプロイメント・エッセンシャルズ」デプロイメントは、WebLogicServerの運用管理において重要な作業です。本セッションでは、デプロイの基本からプロダクション再デプロイメントやFastSwapまで効率的な運用管理をサポートするデプロイメント機能を解説します。■「Contexts and Dependency Injection(CDI)入門」本セッションでは、Java EE 6で仲間に加わったCDIを取り上げます。DI(Dependency Injection)は、Java EE5でも利用できましたが利用は限定的でした。CDIは、DIをより汎用的にしたもので、アプリケーションのコンポーネント間を疎結合にすることができます。今回は、入門者向けにCDIの基本概念から使用方法までをご紹介します。皆様もJavaEEアプリケーションを拡張性の高い疎結合なアーキテクチャにしましょう!(6/4にセッション内容の変更がありました)東京近郊の皆様、6月20日(木) には仕事を早めに切り上げ、午後6時30分にオラクル青山センターに集合しませんか?2013年6月20日(木)18:30~20:30 (受付開始 18:00~) オラクル青山センター〒107-0061 東京都港区北青山2-5-8詳細および登録は こちら から。

2013年6月20日(木)に「第37回 WebLogic Server勉強会@東京」を開催します。 今月は「WebLogic Serverデプロイメント・エッセンシャルズ」と「Contexts and Dependency Injection(CDI)入門」の2セッションです。 ■「WebLogic Serverデプロイメント・エッセンシャルズ」 デプロイメントは、WebLogicServerの運用管理...

02. 特集 - Java EE

“Internet of Things”、“Device to Datacenter”の時代を迎えてますます広がる組み込みJavaの可能性──Java Day Tokyo 2013レポート

サーバやPC、あるいはスマートフォンといった従来のデバイスに加えて、家電製品や各種センサー、そしてICカードなど、さまざまな“モノ”がインターネットに接続される「Internet of Things(IoT)」と呼ばれる時代が到来しつつある。これを受け、オラクルは「Device to Datacenter(D2D)」というコンセプトの下、それらの“モノ”からデータセンターで運用されるプラットフォームまでを含む幅広い領域に対して、多種多様なテクノロジーを提供していくことを表明している。2013年5月14日に東京で開催された「Java Day Tokyo 2013」において、日本オラクル Java Embedded Global Business Unit シニアセールスコンサルタントの笹沼満氏が、このD2Dのキー・テクノロジーとして「Java」の重要性を訴えた。(川添貴生)Internet of Things時代におけるJavaの優位性日本オラクル Java Embedded Global Business Unit シニアセールスコンサルタントの笹沼満氏 Java Day Tokyo 2013では、Java SE、Java EEをテーマにしたセッション・トラックのほか、Java Embedded(組み込みJava)に関するセッション・トラックも設けられ、Internet of Things時代を迎えて活用の機会がますます広がりつつあるJavaの現状と将来を展望するセッションが実施された。その1つであるセッション「Device to Data Centerを実現するJava Embedded Suite」の講師を務めたのが笹沼氏だ。 講演の冒頭、笹沼氏はオラクルが提唱するD2D構想で核を担うJavaの重要性を次のように強調した。 「デバイスからサーバ・サイドまでを含め、Javaによって一気通貫でシステムを作ることにより、現在はエンタープライズ・アプリケーションを開発している開発者が組み込みデバイスの開発を行うことも可能になるなど、開発効率の向上やコスト削減を実現できる」  1995年の誕生当初から「Write Once, Run Anywhere」というスローガンを掲げてきたように、開発したプログラムをさまざまなプラットフォームで実行できることがJavaの大きな強みだ。その中には組み込みデバイスも含まれており、実際にデジタル複合機(MFP)や各種診断装置、Blu-rayプレーヤー、そしてICカードなど、今日では多種多様なデバイスがJavaによって動いている。  このようにJavaが広範に浸透している理由を、笹沼氏は次のように説明する。 「従来の組み込みの世界では、ハードウェアやOSが新しくなれば、その上で実行するプログラムも開発し直さなければならなかった。最近では仮想化技術を使う例も出てきているが、その際にはベースとなるOSと仮想レイヤで動作するOSのそれぞれをメンテナンスしなければならず、負担が大きい。 しかし、最初からJavaでプログラムを開発しておけば、ハードウェアやOSが変わってもJVM(Java仮想マシン)さえ用意すれば従来のプログラムをそのまま実行できるので、開発効率やメンテナンス性を大幅に高められる」(笹沼氏) 組み込み開発に最適化されたJava SE 7 Embedded こうした組み込み用途向けに提供されているJavaプラットフォームの1つが「Java SE Embedded」である。サーバ/デスクトップ版のJava SEと100%の互換性を維持しつつ、組み込み用途では不要なライブラリの削除などによって小フットプリントの実行環境(JRE:Java Runtime Environment)を実現しているほか、キーボードやマウス、ディスプレイなどの入出力機器を持たないデバイス向けに実装を簡素化したヘッドレス版も提供されている。 また、メモリの最適化も図られており、小メモリ環境での起動時にデフォルト割り当てサイズを削減していることも特徴の1つだ。なお、Java SE Embeddedはx86とARM v5/v6/v7、PowerPC向けのLinux版が提供されている。  続いて笹沼氏は、ARMを搭載したシングルボード・コンピュータである「SABRE Lite」を利用したgccとJavaのベンチマーク結果に言及した。このベンチマークでは、素数や行列、数独の解を求めるアルゴリズムをgccとJavaのそれぞれでビルドし、Linuxのtimeコマンドによって処理時間を計測したという。 「例えば、数独の解を求めるアルゴリズムの実行結果を見ると、gccで-O2オプションを付けるとさすがに速いが、デフォルトのgccと比べるとJava SE 7のクライアント版/サーバ版のほうが高速という結果になった。しかも、この結果にはJVMの起動と終了に要する時間も含んでいるので、実際の環境ではさらに速くなる可能性がある。また、ベンチマークによっては、-O2オプションを付けたgccよりもJavaのほうが速いケースもあった。 登場当初の印象から、現在も『Javaは遅いので組み込み用途には向かない』と考えている方がいらっしゃるかもしれないが、この結果を見れば必ずしもそうではないことがわかっていただけるだろう。ぜひ皆さんも実機で現在のJavaのパフォーマンスをご確認いただきたい」(笹沼氏) Java SE 8以降の組み込みJavaプラットフォーム 笹沼氏は、組み込みJavaのロードマップについても説明した。 現状、組み込みJavaの規格としては、ICカード向けの「Java Card」、携帯電話やメーター、通信モジュールなどでの利用を想定した「Java ME CLDC(Connected Limited Device Configuration)」、テレビやセットトップ・ボックス、ネットワーク機器向けの「Java ME CDC(Connected Device Configuration)」、そしてスマートフォンやタブレット端末などリソースに余裕のあるデバイスで利用することを想定した「Java SE Embedded」の4つが存在する。  笹沼氏によれば、Java SE 8以降、これが3つの規格に集約されるという。 「Java SE 8では、従来のCDCがJava SE Embeddedに統合され、CLDCはJava MEとして存続する。それにJava Cardを合わせた3つのプラットフォームで組み込み環境をサポートしていくかたちになる。  従来CDCを使っていた領域がJava SE Embeddedになるため、フットプリントが増えるのではないかと危惧されるかもしれないが、Java SE 8リリースのタイミングで『Compactプロファイル』が提供される。これは、ハードウェアのリソースに合わせてサイズの異なるプロファイルを選べるというもので、最も小さな『Compact1』を選択すれば、ROMサイズを10MB程度にまで抑えることが可能だ」(笹沼氏)  さらに笹沼氏は、リッチなユーザー・インタフェース(UI)を備えたインターネット・アプリケーションを実現する「JavaFX」の組み込み対応についても説明した。 現状のJavaにおけるUIはX11ライブラリなどを使ううえ、AWTやSwingの実装を含め52MBのROMサイズが必要だが、今後はOpenGLを利用することで16MB程度にまで抑える計画だという。JavaFXが使えるようになれば、組み込みデバイスでもUIの柔軟性を大幅に高められることを考えると、JavaFXの組み込み対応は大いに期待したい動きだ。 Webサーバやデータベースをパッケージ化したOracle Java Embedded Suite 笹沼氏が次に紹介したのは「Oracle Java Embedded Suite」である。これはLinuxにおけるLAMP(Linux/Apache/MySQL/PHP)のように、組み込み開発に必要なモジュールをパッケージ化したものだという。 「これまではJava SE Embeddedをダウンロードしても、Webサーバやデータベースが含まれていなかったため、それぞれ別途入手する必要があった。そこでJava Embedded Suiteでは、Java SE Embeddedに加えて、アプリケーション・サーバである『GlassFish for Embedded Suite』やRESTfull Webサービス・フレームワークの『Jersey』、JDBC対応のRDBMS『Java DB』をパッケージ化しており、ダウンロードしたらすぐにWebサーバとデータベースを使ってアプリケーションが構築できるようになっている」(笹沼氏)  このパッケージに含まれるGlassFishは当然フルサイズのものではなく、組み込み用途で利用できるようにした小フットプリント版である。また、Java DBは通常のJDKに含まれているデータベースと同じく、Apache DerbyのOracleブランド版だ。現在オラクルでは、このパッケージをOTN開発ライセンスの下、無償でダウンロード提供している。高度なデータ処理をデバイス/ゲートウェイ上で実現するOracle Event Processing for Oracle Java Embedded 最後に笹沼氏は、「Oracle Event Processing」の組み込み分野での活用例を紹介した。 Oracle Event Processingとは、いわゆる「複合イベント処理(Complex Event Processing)」を可能にするソリューションであり、デバイスなどが生成した大量のデータをイベントとして捕捉し、フィルタリングなどを行ったうえで次の処理フェーズに送るといった処理を高速に行う。これを組み込み用途で利用できるようにしたものが「Oracle Event Processing for Oracle Java Embedded」である。  「デバイス側で生じた大量のイベント情報をすべてデータとしてデータセンター側のサーバに送信していると、サーバ側の負担があまりにも大きくなってしまう。そこで、デバイスや、その先にあるゲートウェイ上でOracle Event Processing for Oracle Java Embeddedを動作させてフィルタリングを行い、ノイズと見なしても問題のないデータを事前に除去することにより、サーバ側の負担を軽減することができる」(笹沼氏)  Oracle Event Processing for Oracle Java Embedded上で動作するアプリケーションはJavaで開発することが可能なほか、標準のSQLをストリーミング・データ向けに拡張した言語「CQL(Continuous Query Language)」によって開発することもできると笹沼氏は説明する。 「ストリーミング・データのフィルタリングやパーティショニング、集約や相関などの処理が行える。また、時間幅を指定することも可能であり、例えば1分間における温度の平均を求めるといったこともCQLで簡単に記述できる」(笹沼氏) さまざまなデバイスがインターネットにつながる Internet of Thingsの時代が本格的に到来すれば、これまで以上に組み込みソフトウェア開発の重要性が高まることは間違いない。その中でJavaをどう活用していけるのか考えるうえで、笹沼氏のセッションは多くの示唆を与えてくれたのではないだろうか。

サーバやPC、あるいはスマートフォンといった従来のデバイスに加えて、家電製品や各種センサー、そしてICカードなど、さまざまな“モノ”がインターネットに接続される「Internet of Things(IoT)」と呼ばれる時代が到来しつつある。これを受け、オラクルは「Device...

02. 特集 - Java EE

Javaはどこに向かうのか? コミュニティが作るJavaの未来──Java Day Tokyo 2013基調講演レポート

日本オラクルは2013年5月14日、東京 秋葉原UDXにおいてJava開発者カンファレンス「Java Day Tokyo 2013」を開催した。今年国内で開催されるJava関連イベントとしては最大規模となる同カンファレンスには、約1200名ものJava開発者が参集。会場は終日、多くの参加者で賑わった。ここでは午前中に行われた基調講演から、米国オラクルのキーマンらが語ったJavaの最新動向、今後のロードマップを紹介する。(編集部)ラムダ式への対応、JavaScriptとの統合が進む次期Java SE 昨年4月、7年ぶりに開催された「JavaOne Tokyo」から約1年。国内でもJavaの今後に対する関心が大きく高まる中で開かれたJava Day Tokyo 2013は、JavaOne 2012 San Franciscoと同様に「Make The Future Java」をテーマに掲げ、約1200名ものJava開発者を集めて盛大に開催された。米国オラクル Javaテクノロジーアンバサダーのサイモン・リッター氏 午前中には基調講演として、米国オラクルのキーマンにより、Javaテクノロジー全般に関するプレゼンテーションが行われた。その中でJava SEの最新動向を紹介したのは、Javaテクノロジーアンバサダーのサイモン・リッター氏だ。 Javaがオラクルの管理下に入ってから最初のメジャー・リリースとなったJava SE 7は、公開から1年余りを経てバグ修正やパフォーマンスの改善が進み、順調にインストール数や対応プラットフォーム数の拡大を続けている。それと並行して進んでいるのが、次期メジャー・リリースの核となる「JDK 8」の開発だ。 JDK 8では、コア・ライブラリの刷新やJVM(Java仮想マシン)の強化を含む、さまざまなイノベーティブな進化が計画されている。リッター氏は、その進化の中でも注目すべきポイントの1つとして、新たに言語仕様で「ラムダ式」に対応することを挙げた。 「ラムダ式への対応により、特に並列処理などにおいて、高いパフォーマンスのアプリケーションを、より簡単に書けるようになる」(リッター氏) また、JDK 8では、JavaScriptの実行エンジンをJVMに統合する「Project Nashorn」がOpenJDKプロジェクトの傘下で進められている。現時点で2014年第1四半期のリリースが予定されているJDK 8 は、現在OpenJDK のサイトでアーリー・アクセス版が入手可能となっているが、リッター氏は「日本の皆さんも、ぜひダウンロードして実際に動かしてみて、要望などのフィードバックを寄せてほしい」と訴えた。 さらに、Java SEの今後のロードマップとして、Javaのモジュール化をさらに押し進める「Project Jigsaw」などを含む「JDK 9」が、2016年以降にリリース予定であることも紹介した。  「このロードマップからもわかるように、我々はJava SEの改良を続けながら、2年に一度のペースでバージョンアップしていく。JDK 8は2014年2月にリリースする予定だが、時間を掛けて質の高いものに仕上げていきたい」(リッター氏)JavaFX 8でビジネス・アプリケーションでの3D活用が進む 今後のJava SEにおいて、従来のSwingに代わり、よりリッチなユーザー・インタフェース(UI)の作成を可能にする技術として採用される「JavaFX」の動向を紹介したのは、Java Client and Embedded Platforms担当バイスプレジデントのナンディニ・ラマーニ氏だ。米国オラクル Java Client and Embedded Platforms担当バイスプレジデントのナンディニ・ラマーニ氏 まずラマーニ氏は、リリースから約1年半を経て、H.234のサポートや、各プラットフォーム向けのGUI作成ツール「Scene Builder」の提供、ARMプラットフォームへの対応といったかたちでJavaFXの利用環境が徐々に整ってきたことを説明。「データ分析やトレーディングといった分野のエンタープライズ・アプリケーションでも、JavaFXが採用されるケースが増えてきた」と話し、実案件での採用実績が着実に積み上がっていることを紹介した。また、すでに発表されているJava FXのオープンソース化についても、今後さらに押し進めていく方針を確認した。 JavaFXは今後、JDKのメジャー・リリースと歩調を合わせながら改良を積み重ねていくという。ここで、JDK 8に統合されるJavaFX 8で実装予定の3D機能について、Javaテクノロジーアンバサダーのジム・ウィーバー氏によるデモが披露された。米国オラクル Javaテクノロジーアンバサダーのジム・ウィーバー氏 ウィーバー氏は、3D機能の活用例として、「商品の在庫状況の可視化」や「ビジネス・プロセスの可視化」などを挙げ、JavaFX 8により、「これらのビジネス分野における3Dの活用が進むだろう」と期待を示した。デモの中で紹介されたのは、地図と3Dモデルを使い、船着き場で貨物船から運ばれたコンテナがどのようにストックされていくのかを、フォークリフトによる移動の様子などを含めて表示するアプリケーションである。 このデモで使われた3Dモデルは、エンターティンメント分野で広く使われているオートデスクの3Dアニメーション・ソフト「Maya」によって作成されたものだ。JavaFX側にこのモデルを取り込むことで、カメラやライト位置の設定、オブジェクトの回転、モデル表面へのテクスチャの張り付け、可視光マッピング、バンプ・マッピングなどの操作をリアルタイムに行えるようになる。 ウィーバー氏によるJavaFXの3D機能のデモの様子 デモ終了後、ウィーバー氏は3D機能を含むJavaFX 8のアーリー・アクセス版がJDK8とともにすでに入手可能であることに触れ、評価とフィードバックを求めていることを強調。TV CMで流行ったフレーズ「いつやるの? 今でしょ!」と日本語でアピールして喝采を浴びた。 JavaFXのロードマップ“IoT時代”で役割がさらに広がるJava Embedded ラマーニ氏がJavaFXに続いて紹介したのは「Java Embedded」。いわゆる「組み込みJava」に関する動向だ。 ラマーニ氏は、ホスト・コンピュータの時代から、Windowsを中心にしたPCの時代を経て、2006年以降はあらゆるデバイスがインターネットを通じて接続される「Internet of Things(IoT)」の時代に突入したと話す。500億台を超えるデバイスが相互に接続/連携するこの時代において、標準化された組み込みプラットフォームであるJava Embeddedが果たす役割はさらに大きくなるとラマーニ氏は力説する。 Internet of Things時代を象徴するJava Embeddedの活用例の中には、すでに実用化されているものが多い。代表的なものとしては、都市の設備管理や交通管理、インダストリアル・オートメーション、自動販売機、貨物管理などが挙げられる。また、近年では医療分野や、急速に普及したスマートフォンをフロントエンドにしたホーム・オートメーションの分野なども注目を浴びている。 「例えば、ホーム・オートメーションの分野では、家庭内のデバイスがそれぞれに相互運用できるだけでなく、コントロールを権限委譲して、他社のアプリケーションからコントロールできることが重要になる。もちろん、プライバシーやセキュリティの面の課題も考慮しなければならない。Javaがこの分野に適している理由は、標準化された技術であり、すでに世界中で900万人以上のソフトウェア開発者を抱える、成熟したプラットフォームだからだ」(ラマーニ氏) オラクルは、組み込み向けのJavaとして、小型デバイス向けの「Java ME for Embedded」、電気製品など中型機器向けの「Oracle Java Embedded Client」、医療機器や銀行のATMなどを含む大型機器向けの「Java SE Embedded」、セキュリティに特化した「Java Card」など、用途とハードウェアの特性に応じてさまざまな規格を提供している。 Java Embeddedは、ICカードから医療機器/銀行ATMまでをカバーする 講演の中では、その最新のプロダクトとして、小型デバイス向け規格の最新版である「Java ME Embedded 3.3」と、Java ME Embeddedを搭載したデバイスを制御するゲートウェイ機器向けの規格である「Java Embedded Suite 7.0」、そして各種機器のバックエンドで大量の情報/イベントをリアルタイムに捕捉して高速に処理する「Oracle Event Processing (OEP) Embedded」などの提供が始まっていることを紹介。これらのテクノロジーを利用することで、フロントエンドからバックエンドまでをJavaで統合的に扱い、緊密な連携と高速な処理が行えると説明した。 Java SEのサブセットとなるJava Embeddedのロードマップは、Java SE/JDKのロードマップと同期している。Javaプラットフォームとしての互換性だけでなく、開発言語などとの整合性も保ちつつ、Java Embeddedは今後も進化を続けていくという。 Java Embeddedのロードマップリリース間近のJava EE 7はHTML5への対応が目玉 ラマーニ氏に続いて壇上に上がり、Java EEの動向を説明したのは、Cloud Application Foundation and Java EE担当バイスプレジデント、キャメロン・パーディ氏だ。米国オラクル Cloud Application Foundation and Java EE担当バイスプレジデントのキャメロン・パーディ氏 パーディ氏は、Java EEの注力ポイントとして「標準ベースであること」、「生産性の高さ」、「ポータビリティ」、「拡張性」、「モジュラリティ」などを挙げ、さまざまなJava EEコミュニティによる貢献が、その進化を促してきたことを改めて強調した。最新のメジャー・リリースとして2009年に公開された「Java EE 6」については、すでに商用/非商用含め18のアプリケーション・サーバが対応するなど、世界中で着々と普及が進んでいる。 そして、今年6月中旬の正式リリースが予定される最新バージョンの「Java EE 7」では、HTML5のサポートやバッチ・プロセスへの対応など、さまざまな改良が施されているという。 Java EEの進化の歴史 それらの中でも特に注目すべき機能として、WebSocketプロトコルによるHTML5アプリケーション開発機能に言及。これに関して、Javaテクノロジーアンバサダーのアルン・グプタ氏によるデモを交えた解説が行われた。米国オラクル Javaテクノロジーアンバサダーのアルン・グプタ氏 グプタ氏が披露したのは、Webブラウザ同士でホワイトボード画面を共有し、互いに更新が行えるシンプルな「コラボレーティブ・ホワイトボード」だ。グプタ氏はこのデモを通して、Java EE 7ではシンプルなPOJO(Plain Old Java Object)により、WebSocketを活用したアプリケーションを容易に開発できることを強調した。 Java EE 7については、6月13日の午後1時(日本時間)より、その正式リリースを祝うライブ・キャスト・イベントが開催される予定だ(聴講の登録は特設サイトで行える)。パーディ氏は、同イベントへの参加と、リファレンス・インプリメンテーションである「GlassFish」の活用を強く促した。 またパーディ氏によれば、Java EE 7の次のバージョンである「Java EE 8」に向けた取り組みもすでに始まっている。JavaとHTML5のハイブリッド・アプリケーション技術である「Project Avatar」のプロトタイプが今年後半に公開される見込みであることに加えて、Java EE 8以降では、軽量サーバ(Thin Server)アーキテクチャの採用、PaaS対応、JSON Binding、NoSQLデータベースのサポートといった機能が組み込まれる予定だという。革新の原動力となるのはJavaコミュニティ オラクルは現在、Javaが今後も正しく進化し続けるための核として、「オラクルのリーダーシップ」、「イノベーティブな技術」、そして「コミュニティ活動」の3つを掲げている。  Java Day Tokyo 2013の基調講演では、3つ目のコミュニティ活動に関して、その重要性と開発者の積極的な参加を訴えるスピーチも行われた。登壇したのは、Java Technology Outreachのグループディレクターであるシャラット・チャンダー氏だ。米国オラクル Java Technology Outreachグループディレクターのシャラット・チャンダー氏 チャンダー氏は、Javaコミュニティの位置づけを「新しいスキルやアイデアに触れ、より深いJavaへのアプローチを可能にする、Javaにとって非常に重要な一部」と説明した。 「Java Dayなどのイベントでは、単に壇上の講演者の話を聞くだけでなく、ぜひ講演者に直接コンタクトして質問してほしい。なぜなら、それにより、あなただけでなく、講演者も、開発者がどういった点に疑問を感じているのかを知ることができるからだ。このことは、コミュニティ全体に利益をもたらす。 Javaテクノロジーは、放っておいたら進化が止まってしまう。進化させ続けるためには、皆さんの参加が必要だ。皆さんが求めていることを、Javaコミュニティの標準化プロセスに参加し、反映していくことを忘れないでいただきたい」(チャンダー氏) チャンダー氏は、Java DayやJavaOneのほかにも、Javaについて学ぶための次のようなさまざまなリソースが用意されていることを紹介した。Oracle Technology Network(OTN)YouTube 「Java」チャンネルJava MagazineJava NewsletterJava Developer Days さらに、Javaについてより深く知り、使いこなしながらコミュニティ活動に参加していくための手段として、次のリソースを活用することを勧めた。Java Users GroupJava Community Process(JCP)Java Specification RequestsFacebook 「Java」ファン・ページTwitter 「Java」 特に日本の開発者にとっては、JCPの委員会に富士通の吉田浩氏が加わったことに加えて、日本のJavaユーザー・グループである「Japan Java User Group(JJUG)」の活動が活発に行われていることが強い助けとなるだろうという。ここで、JJUGの会長を務める鈴木雄介氏が壇上に招かれ、同グループの活動内容を紹介した。JJUG会長の鈴木雄介氏 前任の丸山不二夫氏からJJUGの会長職を引き継いだ鈴木氏は、Java開発者がJJUGなどのコミュニティに参加する意義の1つとして、「特に開発者個人がレベルアップの場として活用できること」を挙げる。 「コミュニティは、Javaの最新情報を知り、より詳しい人と話したり、同じような状況の人と悩みを共有したりすることで、自分が抱えている課題を解決するきっかけが得られるかもしれない場所。特にJJUGは、日本語でJavaの最新情報が得られる貴重な機会だ」(鈴木氏) JJUGにはすでに2000名以上が参加しており、年2回の「クロスコミュニティカンファレンス」、月1回の「ナイトセミナー」などのほか、地方への講師の派遣や国際会議への参加などのかたちで活動を行っている。鈴木氏によれば、2013年は「週末ハンズオン」のような、よりカジュアルなイベントの開催に加えて、Java SE 8やJava EE 7に関する情報交換、地方のユーザー・グループやJava関連団体との連携強化を目指していきたいという。JJUGのWebサイト。参加方法はメーリング・リストに登録するだけ なお、JJUGへの参加は、JJUGメーリング・リストへの登録という簡単な手続きで行える。鈴木氏は、来場者にJJUGへの参加を促すとともに、Twitterのフォロー、そしてJJUGが開催するイベントへの聴講者および講演者としての参加を呼びかけた。 また基調講演の締めくくりとして、チャンダー氏は今年も9月22〜26日に米国サンフランシスコでの開催が予定されているJavaOneへの参加を促すとともに、JavaOne名物となっている「Tシャツ投げ」を行ったうえで、次のように語って講演を終えた。 「Javaとは何だろうか? Javaとは、イノベーションそのものだ。しかし、その革新は皆さんの参加によってのみ可能となり、皆さんはコミュニティを通じて、この革新に参加することができる。コミュニティとは、皆さんそのものだ。単にJavaについて学ぶだけでなく、皆さんがコミュニティを通じてコミュニケートしていくことが何よりも大切なのだ」

日本オラクルは2013年5月14日、東京 秋葉原UDXにおいてJava開発者カンファレンス「Java Day...

05. コラム - WebLogic勉強会 通信

Oracle Linux概要

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。4月25日に開催された「第35回WebLogic Server勉強会@東京」の後半の「Oracle Linux概要」(日本オラクル株式会社 製品事業統括 製品戦略統括本部 原田 元章)セッションをレポートします。今回のテーマはOracle Linux の概要です。Oracle全製品の開発環境、テスト環境として利用されており、 Exadata 、Exalogic といった Engineered System に採用されているオペレーティングシステムです。OS に再起動無しでカーネルのパッチを適用するKsplice テクノロジーの「ゼロ・ダウンタイム・カーネルパッチング」などが語られました。勉強会の最後に、久保さんからJJUGのイベントの告知がありました。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)Oracle LinuxとはOracle LinuxはオラクルのEngineered Systemsに採用されているOSです。オラクルの標準開発環境で使用され、オラクル製品に最適化されたKernel UEKを搭載しています。Red Hat Enterprise Linuxと完全互換性があります。講演中の原田さん Oracle Linuxのカーネルは2種類Oracle Linuxのカーネルは2種類あります。Redhat Compatible KernelとUEKです。grub.confファイル中の起動時のオプションでどちらかを指定し使い分けることができます。 Unbreakable Enterprise Kernel Oracle Linuxの特長オラクルはLinux OSを企業向けのミッションクリティカルシステム向けの用途へ適応するOSと位置づけておりそのための開発・改良を継続的に実施しています。その中でもOSをリブートせずにパッチを適用するためのKspliceツールは運用管理者の業務を省力化しセキュアな環境を提供するために有効な機能です。 Kspliceとは KspliceのデモOSのバージョンアップが無停止で実現されました。 Kspliceのまとめ 最後にOracle Linuxの概要セッションを振り返ってみました。詳細は、「Oracle Linux概要」をご覧ください。アンケートでは、Kspliceの機能への関心が高く、動的なセキュリティパッチ適用などの運用を検討始めようとのご意見もいただきました。WebLogic Server勉強会では今後もOracle Linuxの情報アップデートを継続的に行います。ご期待ください。セミナーの最後に久保智氏からJJUGのイベント紹介がありました。 【関連情報】WebLogic Server勉強会WebLogic Serverの活用ノウハウは「WebLogic Server勉強会」で!WebLogic Serverダウンロード(開発用途での利用は無償)WebLogic Server関連ドキュメントWebLogic Serverお役立ち情報

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 4月25日に開催された「第35回WebLogic Server勉強会@東京」の後半の「Oracle Linux概要」(日本オラクル株式会社 製品事業統括 製品戦略統括本部 原田 元章)セッションをレポートします。今回のテーマはOracle...

01. 特集 - WebLogic Server

「Webアプリケーションのモバイル/スマート・デバイス対応も見据え、まずはフロントから」──伊賀敏樹氏(いがぴょん)がJava EE 6への移行をすすめる理由

開発生産性の向上や軽量化が図られ、従来から大きく刷新されたJava EE 6。WebLogic Serverなど主要なアプリケーション・サーバでの対応も進み、目の利くアーキテクトらは、その恩恵を享受すべくJava EE 6への移行に動き始めている。その1人、長年Java EE開発に携わってきたNTTデータビジネスブレインズの伊賀敏樹氏は、「Java EE 6の登場で、それまでの Java EEへの印象をいったんリセットする必要があると感じた」と語る。今後、需要が高まるモバイル/スマート・デバイス対応Webアプリケーションの開発効率改善も見据えてJava EE 6の採用を順次進めようとしている伊賀氏に、今、Java EE 6を試すべき理由、移行する理由を聞いた。(編集部)かつては、EJBも Java EEもネガティブ扱いだった 2013年2月に開催された「WebLogic Server 12c Forum 2013」のパネル・ディスカッション「Java EE 6の現在とJava EE 7、そしてその先へ」に登壇し、Java EE 6活用の現状について話してくれた伊賀氏。その中で氏は、「Java EE 6が登場し、それまでの Java EEに対する(ネガティブな)印象をいったんリセットする必要があると感じた」と語った。その理由、Java EE 6のどこに大きな価値を感じているのかを改めて聞いた。●関連記事“いま”そして“これから”のJava EEに、開発者はどう取り組むべきか?【前編】──「WebLogic Server 12c Forum 2013」レポート“いま”そして“これから”のJava EEに、開発者はどう取り組むべきか?【後編】──「WebLogic Server 12c Forum 2013」レポート Java EEの黎明期より、「いがぴょん」のハンドル・ネームでIT系メディアやブログや書籍などを通じて技術情報の発信に努めるほか、各種オープンソース・フレームワークの開発にも尽力してきた伊賀氏。現在はNTTデータデータビジネスブレインズのシニア・スペシャリストとして、Java EEや.NETを使った大小さまざまな規模の開発案件に携わっている。 そんな伊賀氏はこれまで、Java EE全般に対して、あまり良い印象を持っていなかったと振り返る。WebLogic Server 12c Forum 2013のパネル・ディスカッションに登壇した伊賀敏樹氏。「いがぴょんの日記」、「いがぴょんのウェブページ」より情報発信中 「かつてのJava EE、特にEJBは、仕様が複雑で使いこなすのが難しい技術でした。1つのEJBコンポーネントを開発するために多くのファイルを作らなければならず、しかも当時の標準的なマシン上では EJB コンテナがのろのろと重たく動作するという状況でした。面倒さの割にはメリットが見えづらいものであったため、EJBを使わずにPOJO(Plain Old Java Object)を使うアプローチに流れていくエッジな Java エンジニアを多く見てきたものです」(伊賀氏) とは言え、Java EEと袂を分かったわけではなく、業務でかかわるJava EEプロジェクトの開発効率化にアーキテクトとして尽力する傍ら、Java EE開発を効率化する各種オープンソース・ソフトウェア(OSS)の開発にも参画してきた。 例えば、伊賀氏がコミッターを務めるフレームワーク「blanco Framework」も、そうしたOSSの1つだ。blanco Frameworkでは、Excel上で必要な情報を入力すると、DAO層のプログラムやファイル入出力用プログラムなど、必要なコードを自動生成してくれる(blanco Framework 自体は、Java、C#.NET、JavaScript、VB.NET、PHP、Ruby、Pythonのコード生成に対応)。こうしたフレームワークを実案件でも活用し、システムの開発生産性や品質を高めているのだ。 伊賀氏は、Java EEなどの新しい技術に対する自身のスタンスを、次のように説明する。 「私は、新しい技術は少しずつ実プロジェクトに取り入れていくのが良い取り組み方だと考えています。エンタープライズ・システムにおいては “いっぺんに” 新技術に入れ替えてしまうのはリスクが高くなりがちです。慣れ親しんだデータベース層の実装技術を短か目のサイクルで更新していくのはメリットが出にくいことも懸念されるため、『まずフロント部分から新技術を採用することができないか検討する』ような判断基準を基本としています」JSF 2(Facelets)を試して、Java EEを見る目が変わった この持論の下、開発効率や品質の向上に常に目を光らせてきた伊賀氏は、折に触れてJava EEの新技術の吟味も続けてきた。特に注目してきたのがWebアプリケーションのフロント部分の開発技術だ。 「これまで長い間、フロント部分の開発では、Struts 1が多くの現場で採用されてきました。Struts 1 であれば、対応できる開発者も多くいるため、大規模なプロジェクトであっても要員を比較的集めやすい傾向にあるものと感じられます。 しかし今日、Struts 1 は開発生産性をはじめとして多くの課題に直面しています。 例えば、JSPのカスタム・タグ・ライブラリによる部品開発は現時点ではひどく煩雑なものに見えてしまいます。また、Webページ(JSPファイル)内に直接コードを書けてしまうScriptletsのような仕組みは、手軽で便利ではあるものの本来バックエンドに置いておきたいロジックがフロントに配置できてしまうことから、セキュリティ面における問題を引き起こしてしまう場合があります」(伊賀氏) そのため、Struts 1 に代わる新たなフロント開発技術を常に探してきたわけだ。そうした中、Java EEの新たなフロント開発技術としてJSFが登場する。ただし当初、JSF そのものに対する印象は芳しくなかった。 「2004年にJSF 1.0が登場したときは、APIがまだ全然足りていないという印象でした。繰り返し処理の適切な仕組みもなかったので、ちょっとした複雑な画面の開発ですら生産性が落ちてしまうようなものでした。 その後、2006年にJSF 1.2が登場し、Java EE 5に取り込まれたのを機に、改めて実際の評価を行ってみました。当時の時点でも API は不足気味であったので、いくつかのOSSのフレームワークを組み合わせたうえでGlassFish 2上にシステムを組んでみたのです。しかし、ここでも残念なことに、組み合わせに用いたOSS同士の相性の問題などもあり、満足のいく生産性を当時は得ることができませんでした」(伊賀氏) だが、「いずれはJava EEの標準技術だけですべてをまかなえるようにしたい」と考えていた伊賀氏は、引き続きJSFに注目。2009年のバージョンアップでJSF 2となってFacelets が組み込まれ、これがJava EE 6に取り込まれると、改めて小規模な実案件でJSF 2を採用してみたという。 「JSF 2では、テンプレート技術としてFaceletsが導入されており、これを恐る恐る試してみました。GlassFish 3上にJSF 2ベースでフロント部分を組んだのですが、このとき、Faceletsベース開発における生産性の高さに非常に感心しました」(伊賀氏) 伊賀氏が「それまでのJava EEへの印象をいったんリセットしないといけない」と感じた瞬間である。開発生産性、セキュリティ、安心感、そしてStruts 1のEOL──JSF 2/Java EE 6への移行をすすめる理由 Faceletsでは、部品となるコンポーネントを組み合わせて画面を構成する「Composite Component(CC)」のアプローチを採用している。個々のコンポーネントは複数の画面で再利用することができ、コンポーネントの差し替えにより、複数ページの該当部分をまとめて変更することが可能だ。このCCにより、従来のJSP(カスタム・タグ・ライブラリ)による画面部品開発のアプローチと比べて開発生産性を大幅に高めることができる。 今日のWebアプリケーションでは必須になりがちなAjaxとの親和性の高さも大きな魅力だ。JSF 2ではAjax対応機能が追加され、AjaxアプリケーションをJavaScriptを直接手で書くことなく簡単に開発できるようになっている。 さらに伊賀氏は、セキュリティの高さもJSF 2(Facelets)の大きなメリットだと強調する。 「Faceletsには、JSPのScriptletsに相当する機能が基本的に存在しません。このため、Webページに直接ロジックが書き込まれることに起因するセキュリティ・ホールの発生をかなり低く抑えることができます。また、画面遷移の順を飛ばしてWebページを表示させようとするとエラーが発生する仕組みや、画面上のドロップボタンやラジオボタンの選択について値が妥当かどうかの検証を行う仕組みもデフォルトで最初から組み込まれて有効になっています。 こうした仕組みのおかげで、Webアプリケーションに対して最近よく使われる典型的な攻撃手法の多くが初めから無力化されますので、Facelets は“天然でよりセキュア”なのです。Facelets において Scriptletsを書けないと聞くと、JSPに慣れた方にとってはデメリットなだけであるように感じられるかもしれませんが、私は Web システムのセキュアさ向上のためには、そもそもScriptletsは書けないほうが有利であるとすら思っています。ちなみに、Scriptlets の代わりは JSFのManagedBeanを呼び出すことによって代替することができます」(伊賀氏) 実際に、いくつかのWebアプリケーションのWeb セキュリティ診断を受診した結果からは、JSF 2(Facelets)ベースによるWeb アプリケーションはStruts 1ベースのものに対して有利な評価を得る傾向にあるという。 「JSFの今後のバージョンでは、クロスサイト・スクリプティングやクロスサイト・リクエスト・フォージェリへの対応が追加および強化される予定があるとのことですので、Webセキュリティ面はますます強固になっていくことが期待されます。このような JSF(Facelets)のセキュリティ面におけるメリットについては、オラクルさんから、もっと宣伝していただきたいくらいです(笑)」(伊賀氏) 加えて、JSFをはじめとするJava EE 6では「EoD(Ease of Development:開発容易性)」を指向してコードが簡略化されているため、ソースコードが読みやすくなるように改善されており、レビューなどで間違いを見つけやすい点も大きな利点である。 そして何より、Java EEの標準技術ですべてをカバーできるという安心感がある。 「Java EEの標準技術の中ですべてを完結させられるメリットは大きいですね。これまでは独自にOSSなどを組み合わせてアプリケーション基盤を準備することが多かったのですが、それら複数のOSSを組み合わせていくと、相互の相性や依存するライブラリのバージョン管理などがどうしても煩雑になりがちです。 Java EE 6なら、そうした苦労や責任はアプリケーション・サーバ・ベンダーが担ってくれます。アプリケーション・サーバ・ベンダーが開発して提供するAPI実装を使い、彼らからサポートを受けることができ、セキュリティ維持の営みの多くの部分について肩代わりしてもらえるのですから、これをうまく活用しない手はありません。 それに、Java標準技術であるので、いざとなったらアプリケーション・サーバを別のものに移行することもできます。特定の製品やフレームワーク、技術にロックインされる心配がないことや、利用している技術がガラパゴス化してしまうリスクを回避できるということも大きなメリットでしょう」(伊賀氏)Struts 1がついにEOLを迎えた(EOLを告げるアナウンス・ページ) もう1つ、伊賀氏が早くJava EE 6への移行を進めたい困った事情がある。それは、Struts 1のEOL(End Of Life:開発停止)の問題だ。 「2013年4月、ついにStruts 1のEOLがアナウンスされました。今後、セキュリティ上の問題点などが見つかったとしても、それが開発元(アパッチ・ソフトウェア・ファウンデーション)によって修正されなくなってしまったのです。 国内には、まだStruts 1ベースのシステムが多く稼働していることでしょう。それらのシステムのうち、特にインターネット上に接続されているものについては、今後何らかの対応が必要になってくる可能性があります。Struts 1に依存するフレームワークについても影響を受ける可能性があるので、場合によってはシステム基盤そのものの刷新が必要になるケースも出てくることでしょう。 こうした点からも、古いJava EE基盤は見直しを検討すべき時期を迎えてしまった可能性があります。Struts 1は大きな成功を収めたフレームワークですが、今となっては開発生産性もそれほど高いものではありません。Struts 1 の過去の成功体験にしがみつきたい気持ちはよくわかりますが、将来的にリスクを抱え込んでしまう可能性にも留意する必要があるのではないでしょうか」(伊賀氏)小規模プロジェクト、アジャイル・プロジェクト、モバイル/スマート・デバイス対応──Java EE 6を試すタイミング このように、Java EE 6への移行の機が熟してきたとはいえ、いきなりすべてを刷新するのは難しい。先述したように、伊賀氏も「まずは変化の激しいフロント部分から」と考えている。 それでは、どのような機会にJava EE 6の利用を検討すればよいのだろうか。 「まずは小規模なプロジェクトで試してみるのが良いように考えます。私は10人月程度の規模のプロジェクトから適用を始めてみました。 効果をすぐに実感できるという点では、アジャイル開発プロジェクトにおいて試すのも1つの手です。JSFにはEoDに関する改善が多く含まれているので、新規に開発する場合はもちろんのこと、変更要求に対してもさまざまな面で有利なことが多いものと考えます。FaceletsでCCを使っている場合であれば、それらの変更要求に対してごくわずかな修正作業だけで対応が済んでしまうこともあります。 さらに最近、ユーザー企業の中にJava EE 6への移行に積極的に取り組むところが出てきているように聞き及びます。なるほどSIerよりもユーザー企業の内製プロジェクトのほうが、Java EE 6のような新しい技術に取り組みやすいのかもしれませんね」(伊賀氏) 今後、Webアプリケーション開発の世界ではモバイル/スマート・デバイス対応の需要が大きくなると見られるが、これに関してもJava EE 6には大きな強みがある。 「今後のWebアプリケーション開発ではHTML5が主流になっていくことでしょう。HTML5に取り組む場合、XML形式に親和性が高いFaceletsを使うのは技術的に自然な発想ですね。XMLウェルフォームド妥当性検証ひとつとっても、JSPの場合は基本的にいったん表示させたうえでしか妥当性検証が実施できませんが、Faceletsは元からXML形式となっていて妥当性検証は簡単に実施できます。 モバイル/スマート・デバイス向けに新しく作るWebアプリケーションについてもHTML5ベースになることは多くなるでしょうから、そこでもFaceletsを使うと効果が高いものと思います。Java EE 6なら、RESTやSOAPを使ったアプリケーションを従来に比べて非常に簡単に記述できるのも魅力です。モバイル/スマート・デバイス向けWebアプリケーションのうち、トランザクションを多く扱うようなアプリケーションであれば特にJava EEの強みが生かせますし、何より私にとっては安心感があります。 モバイル/スマート・デバイス向けは、今後のWebアプリケーション開発の“主戦場”の1つとなるでしょう。その状況に備えて、今から開発効率や品質を高めやすい技術を準備しておかないと間に合いません。これも、Java EE 6を試す大きな動機付けになっていくことでしょう」(伊賀氏)レガシーでありながらも革新的に──これからのJava EEへの期待 以上のように、Java EE 6への移行は企業に多くの恩恵をもたらす可能性があるが、一方で伊賀氏は、Java EE 6を取り巻く現状に課題も感じている。 「英語でも日本語でも、まだまだ技術情報が少ないですね。今後は日本でも多くの方にJava EE 6を試していただき、そこで得た情報をブログなどで発信していただきたいと期待しています」(伊賀氏)Manjyuにおける、コードを書くことなく、Ajaxアプリケーションを作ることができる実装例 参考にできるサンプル・アプリケーションがまだ充実していない点も改善すべき点の1つだ。この状況の改善に少しでも貢献すべく、伊賀氏は自身がJSF 2の機能検証のために試作したURL管理用のサンプル・システム「Manjyu」をOSSとして公開している。 「Manjyuは、JSF 2の機能検証のために開発したものです。サンプル・アプリケーションであるのと同時に、さまざまなJSF 2 Faceletsの機能を確認するための “陳列棚”にもなっています。もちろん、Facelets の魅力機能の1つである、ノンプログラミングでAjaxアプリケーションを実装する例も盛り込んでありますよ。ぜひ多くの方に試していただき、JSF 2の便利さを知っていただきたいと思って公開しています」(伊賀氏) それでは、今後のJava EEに対しては何を期待しているのだろうか。 「現在のJavaは、人によってはレガシーな技術だと考えられているかもしれません。レガシーというとどうもネガティブな印象で見られがちですが、私はJavaに、今後もレガシーだからこそ実現できる、安定(Stable)で、成熟(Mature)な技術であり続けてほしいと思っています。だから正直なところ、言語仕様などはあまり変えてほしくないくらいです。このため、例えばクロージャのような新技術����言語仕様に取り込む際に、それを無効化するオプション機能を付けて欲しいと思うほどです。 ただし一方で、引き続き革新的でもあってほしいです。例えば、今後はPHPに代表されるようなLightweight Language(LL)では実現されているマルチテナント対応能力について強化していただきたいです。現状、Javaでサービスを作っても、それを安くホスティングできるホスト先はまだまだ少ないように感じます。一方で PHPであれば安いホスティング・サービスはたくさんありますよね。こんな状況ではJavaはLLに太刀打ちできません。今後、クラウドという手法がITにおいてますます普及していくであろうことを考えると、マルチテナントで安くホスティングできて、さらにスケールもできるようにするための基本的な仕組みがJava EEの機能として提供されていることが必須なのです」(伊賀氏) “プロフェッショナルな” Webアプリケーション開発との親和性のさらなる向上にも期待している。 「Webデザイナーと共同作業する “見栄え” が重要なWebアプリケーション開発では、 divタグやCSSで微調整が施された “ぎりぎりの” HTML ファイルを扱うことが多くなってきたように思われます。ところが、Faceletsが生成するHTMLの中に余計な空白や改行などが含まれているケースがあり、これがレイアウト崩れを引き起こしてしまい作業効率が落ちる場面があるのです。他方、モバイル/スマート・デバイス向けの場合にHTMLファイルなどのファイル転送量を1バイトでも減らすことが重要なケースもあります。それらも考慮し、生成するHTMLは無駄が省かれた極力シンプルなものになるよう改善していってほしいですね」(伊賀氏) 伊賀氏は今後も、身の回りのプロジェクトについて、可能なものから順次Java EE 6を採用していきたいのだという。また、Java EE 6のノウハウも可能な範囲でIT系のメディアや OSS などのかたちを通じて発信していきたいとのことだ。本記事をお読みのアーキテクト諸氏にも、ぜひ伊賀氏の情報/ノウハウを活用していただくとともに、日本のJava開発者のスキル向上のために、ぜひ情報発信の輪に加わっていただきたい。 「古くからJava EE開発にかかわり、現在は開発標準の整備などを担っているアーキテクトの方々の中には、EJBやJSF 1.Xなどを試して辛酸をなめてしまい、その悪い印象から最近のJava EEの利用についても躊躇しておられる方々も多くいらっしゃることでしょう。 しかし、JSF 2、そしてJava EE 6は、これまでのJSF/Java EEとはかなり違うものであると感じられます。APIも充実してきており、アプリケーション・サーバにおける対応も進んできています。これまでのWebアプリケーション開発の成功体験のエッセンスがJava EEというかたちに結実し、安心して使い続けられる技術へと成熟したように感じられます。私たちアーキテクトにとって、非常に魅力的なプラットフォームだと思いますので、ぜひ試してみてください」(伊賀氏)

開発生産性の向上や軽量化が図られ、従来から大きく刷新されたJava EE 6。WebLogic Serverなど主要なアプリケーション・サーバでの対応も進み、目の利くアーキテクトらは、その恩恵を享受すべくJava EE 6への移行に動き始めている。その1人、長年Java EE開発に携わってきたNTTデータビジネスブレインズの伊賀敏樹氏は、「Java EE 6の登場で、それまでの...

04. 実践! Java EE 6

[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(8) CDI第1回

本連載では、サンプル・アプリケーションの開発を通じてJava Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。今回から2回にわたって、Contexts and Dependency Injection for the Java EE platform(CDI)をとりあげます。DIの仕組みは、Java EE 5から一部のJava EEコンポーネントで利用できましたが、Java EE 6からは、より汎用的なCDI(JSR 299)が取り込まれました。CDIは、コンテナ上で管理されているコンテキストに紐付いたDIの仕組みであり、Java EEアプリケーションで利用する上で、一般的なDIフレームワーク以上のメリットがあります。今回はCDIがどのような機能を提供するのか、実際にサンプルコードを動かしながら解説していきます。(日本オラクル Fusion Middleware 事業統括本部 二條智文)CDI概要依存性注入(Dependency Injection=DI)というソフトウェア・デザインパターンは、今日ではすでに一般的な用語として定着しており、本記事をご覧の皆様は、実際にプロジェクトで利用されていることが多いと思います。特にSpring FrameworkやGoogle GuiseといったDIフレームワークを活用し、コンポーネントを疎結合とし、チーム開発の効率化やメンテナンス性の向上など、実践レベルで使いこなしているという方も多いのではないでしょうか?Java EEに着目するとこのようなDIの仕組みはJava EE 5から仕様として取り込まれました。ただ、Java EE 5のDI機能は、限られたコンポーネントのみで、かつDI対象となるコンポーネントの種類ごとに異なるDIの記述方法をしなければならないなど、非常に限定的な仕組みでした。Java EE 6からは、より汎用的なDIの仕組みとしてCDI(JSR299)が仕様に取り込まれました。CDIは、Java EE 6仕様の中でも、Java EEアプリケーションをコードレベルから構造を改良し、開発に大きな変化をもたらす最も有力な仕様だと考えています。CDI(Contexts and Dependency Injection)はその名前が表すとおり、次の2つが主要な機能となります。Contextsステートフル・コンポーネントのライフサイクルや相互の関連性を、明確に定義され拡張可能なライフサイクル・コンテキストにバインドするDependency Injection型安全な方法でコンポーネントをアプリケーションに注入でき、どの実装を注入するのかを規約に基づいて選択する重要なのは、CDIというのは単なる依存性注入の仕組みではなく、注入したオブジェクトを、コンテナが管理するライフサイクル・コンテキストにバインドするという点です。これにより、そのオブジェクトの下に挙げたような細かい利用方法を意識しなくても、利用するオブジェクトの型やセマンティクスを意識するのみで利用することができるようになります。オブジェクトのライフサイクルをどう考えればいいのか?オブジェクトのスレッドモデルは?オブジェクトの他のクライアントは意識しなくていいのか?オブジェクトを明示的に破棄する必要があるのか?オブジェクトを使い回す場合にリファレンスをどこに保持するのか?異なるオブジェクト間で、このオブジェクトをどうやって共有するのか?コンテナがコンテキストに紐付けてライフサイクルを管理するオブジェクトをCDIではBeanという一般的な用語で定義しています。Java EE 6より前は、Beanという用語の定義はあいまいで、Java EE仕様の中にもいくつかのBean定義がありました(EJB Beans、JSF Managed Beansなど)。また、その他のサードパーティ製フレームワークでもBeanは様々な定義で使われていました(SpringのBeanなど)。CDIでは、セッションBean、マネージドBeanやJava EEリソースなど様々なコンポーネントがBeanとなります。その他にも、CDIには以下の機能も定義されています。Expression Language(EL)と統合され、JSFページやJSPページから直接利用できる注入されたコンポーネントのデコレート機能インターセプターをコンポーネントに型安全にバインドする機能イベント通知モデル標準的なスコープ(request、session、application)に加えて、Java Servlet仕様で定義されているweb conversationスコープを利用可能サードパーティフレームワークをJava EE 6に統合できるService Provider Interface(SPI)を提供なお、CDIはJSR 299で定義されており、以下のURLから仕様書をダウンロードできます。http://jcp.org/aboutJava/communityprocess/final/jsr299/index.htmlそれでは、実際にコードを書いて、CDIの動作を体験していきましょう。このブログの内容CDIの第1回では、CDIの各種機能を実際にシンプルなアプリケーションを用いて体験します。第2回目では、過去に連載した他の仕様と組み合わせて利用する方法をいくつかご紹介いたします。第1回では以下のような内容を扱います。初めてのCDICDIでHelloスコープ定義@Qualifierの使い方@Producesの使い方@Alternativeの使い方インターセプターの利用デコレータの利用アプリケーション開発の準備本連載では、Oracle Enterprise Pack for Eclipse(OEPE)を使用してサンプル・アプリケーションの開発を進めます。OEPEやWebLogic Server 12cのインストールおよび設定が終わっていない方は、記事「 [連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(1) 概要」を参考にしてください。「New Dynamic Web Project」画面(クリックして拡大)OEPE起動後にまず今回のアプリケーション用のEclipseのプロジェクトを作成します。「New」->「Dynamic Web Project」を選択します。「New Dynamic Web Project」ウィンドウが表示されたら、「Project Name」としてここでは「CDISample」を入力し、「Finish」ボタンをクリックします。デフォルトでは、CDI機能はオフとなっています。CDIを有効化するには、beans.xmlというマーカーファイルを、モジュールに含める必要があります。このファイルの中身は空で構いません。Webアプリケーションの場合は、WEB-INF直下にbeans.xmlファイルを配置します。CDISample -> WebContent -> WEB-INFで右クリックしNew->Fileを選択し、File nameに”beans.xml”と指定してファイルをWEB-INF直下に作成してください。これで、Webアプリケーションの実行時にCDIが有効になります。はじめてのCDI「New Java Interface」画面(クリックして拡大)まずは、最もシンプルな例として、Servletから”Hello”を表示するシンプルなプログラムを作成してみましょう。まずは、Helloインタフェースを定義します。CDISample->Java Resources->srcを右クリックして、New->interfaceを選択し、右のように入力してください。作成したインタフェースにsayHelloメソッドを定義します。Hello.javapackage cdi;public interface Hello {public String sayHello(String name);}「New Java Class」画面(クリックして拡大)次に、Helloの実装クラスを作成します。CDISample->Java Resources->srcを右クリックして、New->classを選択し、右のように入力し、Finishボタンを押します。作成されたHelloInEnglish.javaクラスのsayHelloメソッドを以下のように記述します。HelloInEnglish.javapackage cdi;public class HelloInEnglish implements Hello, java.io.Serializable {@Overridepublic String sayHello(String name) {return "Hello " + name + "!";}}「Create Servlet」画面(クリックして拡大)次に、Hello Beanを使用するServletを作成します。CDISample->Java Resources->srcを右クリックして、New->Servletを選択し、右のように入力し、Finishボタンを押します。作成されたServletに以下のように赤字部分の記述を追記します。TestServlet.javapackage cdi;… 略 …import javax.inject.Inject;@WebServlet("/TestServlet")public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; // Helloを注入 @Inject Hello hello; … 略 … // doGetに処理を追加 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// Hello.sayHelloをコールした結果を出力 response.setCharacterEncoding("Shift_JIS"); PrintWriter out = response.getWriter(); out.print("<html><head><title>CDI Test</title></head><body>"); out.print("<h2> " + hello.sayHello("Duke") + "</h2>"); out.print("</body></html>"); } … 略 …}「Run on Server」画面(クリックして拡大)CDIでは@Injectアノテーションにより、インタフェースに適切な実装クラスが注入されます。注入されるBeanはデプロイ時にチェックされます。それでは、TestServletを実行してみましょう。TestServlet.javaを右クリックし、Run As -> Run On Serverを選択します。Run On Server画面で、”Oracle WebLogic Server 12c(12.1.1)”を選択して、Finishボタンをクリックします。 「Hello Duke」画面(クリックして拡大)WebLogic Serverが起動するまで、しばらく待ちます。次のように”Hello Duke!”が表示されます。TestServlet.javaのHello Beanを利用しているコードのみに注目すると、Helloという型のみを知っていれば良く、その注入にも@Injectアノテーションを付与しておくだけです。実際に注入される実装クラスは実行時に適切に選択されます。TestServlet.javaの抜粋// Helloを注入 @Inject Hello hello; …略… out.print("<h2> " + hello.sayHello("Duke") + "</h2>");スコープの指定CDIでは、Beanを適切なコンテキストに紐付けて管理するために、スコープという概念を利用して定義します。Beanにスコープを定義することで、スコープに沿ったライフサイクルや可視範囲がコンテナにより制御されます。Java EE 6では、以下の組み込みの4つのスコープと、@Dependentという特殊な1つのスコープ定義が定義されています。スコープアノテーション説明Request@RequestScoped単一リクエストごとのスコープSession@SessionScopedセッションごとのスコープ。同一セッションであれば、複数リクエストから共有されるApplication@ApplicationScopedWebアプリケーション全体で共有されるスコープConversation@ConversationScopedJSFアプリケーションにおいて、特定のページ遷移の間で保持されるスコープDependent@Dependentデフォルトのスコープ。Beanクライアント側のスコープを自動的に引き継ぐ。デフォルトのスコープは@Dependentで、そのBeanを注入したClient側のBeanと同じライフサイクルを取ることを意味します。先ほど作成したHello Beanでは、スコープの指定をしていないため、デフォルトの@Dependentが適用され、これは、Hello インスタンスがTestServletのライフサイクルと同じとなることを意味します。それでは、Hello Beanに対して、スコープの影響を調べるために、HelloInEnglish.javaに以下のようにsayHelloメソッドが呼び出された回数を保持して、返すように実装を変更します。HelloInEnglish.javapackage cdi;public class HelloInEnglish implements Hello {private int count; @Override public String sayHello(String name) {count++; return "Hello " + name + "!: call count: " + count; }}この状態で、TestServletを実行してみましょう。スコープ定義はしていないので、デフォルトで@Dependentとなり、Hello BeanのライフサイクルはTestServletと同等となります。よって、この場合は、リクエストやセッションなどにかかわらずに呼び出し回数が増加します。もし、お手持ちの環境に複数のブラウザがあれば、以下のURLで複数のブラウザからアクセスしてみてください。http://localhost:7001/CDISample/TestServletアクセスするたびに、呼び出し回数がカウントアップされることが分かります。それでは次に、以下のようにHelloInEnglishe.javaに@RequestScopedを付与してみます。HelloInEnglish.javapackage cdi;import javax.enterprise.context.RequestScoped;@RequestScopedpublic class HelloInEnglish implements Hello { private int count; @Override public String sayHello(String name) { count++; return "Hello " + name + "!: call count: " + count; }}同様にTestServletを実行して、複数のブラウザから何度かアクセスしてみましょう。@RequestScopedの場合は、リクエストごとにライフサイクルが終わるため、呼び出し回数は常に1回となります。最後に、以下のように@SessionScopedを付与してみます。なお、SessionScopeはPassivating Scopeであるため、java.io.Serializableをimplementsに指定する必要があります。Passivating Scopeとはセッションのような長いライフサイクルにおいて、セッションがインアクティブになっている状態のときに、メモリを有効活用するために、適宜Beanをメモリからディスクなどに退避することが可能なスコープ定義です。このため、Beanをシリアライズ可能にしておく必要があります。(これをPassivation capable beanと呼びます。)HelloInEnglish.javapackage cdi;import javax.enterprise.context.SessionScoped;@SessionScopedpublic class HelloInEnglish implements Hello, java.io.Serializable { private int count; @Override public String sayHello(String name) { count++; return "Hello " + name + "!: call count: " + count; }}TestServletを実行し、複数のブラウザから何度かアクセスしてみましょう。@SessionScopedが付与されている場合は、ブラウザごとのセッションに紐付いてライフサイクルが管理されるため、ブラウザごとに呼び出し回数が増加します。これで、スコープごとの挙動の違いが確認できました。(Conversation Scopeは少し複雑なため、ここでは説明は割愛します。)ここで注目すべきなのは、Hello Beanのクライアント側(TestServlet)では、ライフサイクルやその可視範囲(リクエストごとやセッションごとなど)を一切意識せずに、Helloインタフェースという型のみを意識するだけで良いということです。それらは、すべてHello Bean側にだけ定義しておけばよい内容となり、Hello Beanとそのクライアント(TestServlet)は、コード上では非常に疎結合な状況で動作していることになります。CDIは、このように疎結合(loose-coupling)および強い型付け(strong typing)をテーマに機能を実現しています。疎結合(Loose-coupling)Beanを利用する側は他のBeanの型やセマンティクスのみを定義し、実際のライフサイクルや具体的な実装、Beanが動作するスレッドモデルや、そのBeanと協調動作する他のBeanなどを詳しく知る必要ありません。これにより、コードのメンテナンス性は向上します。また、開発時やテスト時、本番環境などデプロイ環境により、そのBeanの実際の実装やライフサイクル、スレッドモデルなどをBean Client側を変更せずに適用できます。強い型付け(Strong typing)先ほどのコードの中にはDIのためのStringベースの識別子はありません。@Injectアノテーションを付与することで、設定より規約というデフォルトのルールに従って実装クラスを適切に選択して注入します。また、文字列による識別を排除したため、コンパイル時に型のチェックが可能であり、アノテーションによる宣言的な定義で、XMLは不要になります。また、アノテーションベースなので、開発時にもツールがコードを特定しやすい。といったメリットもあります。おまけHelloInEnglish.javaに以下のようなアノテーションを指定したメソッドを利用することで、ライフサイクル(いつ作成されていつ破棄されるのか)を実際に監視してみることも可能です。HelloInEnglish.javaimport javax.annotation.PostConstruct;import javax.annotation.PreDestroy;//メソッドの定義@PostConstructprivate void postConstruct() { System.out.println("-- Hello Bean is created!");}@PreDestroyprivate void preDestroy() { System.out.println("-- Hello Bean is destroyed!");}@Qualifierによる実装の指定ここまでのコードでは、Helloインタフェースに対する実装クラスがHelloInEnglish.javaの一つだけであったため、@Injectにより、このWebアプリケーションにおける唯一の実装クラス(HelloInEnglish)が注入されました。では、同じアプリケーション上に複数のHelloインタフェースの実装クラスが配置されていたらどうなるでしょうか?次のようなもう一つのHelloインタフェースの実装クラスを作成してみましょう。HelloInJapanese.javapackage cdi;import javax.enterprise.context.SessionScoped;@SessionScopedpublic class HelloInJapanese implements Hello, java.io.Serializable { private int count; @Override public String sayHello(String name) { count++; return "こんにちは " + name + "さん。: 呼び出し回数: " + count; }}この状態で、TestServletを実行してみてください。この場合は、デプロイ時にエラーが発生します。Helloの実装クラスが2つあるため、どちらの実装を使うべきか判断できずデプロイ時において、エラーが発生するという動作となります。これを回避するには、明示的にどちらの実装クラスを利用するかをあらかじめ指定しておく必要があります。その指定方法として、実装クラスを限定するために、CDIではQualifier機能を利用します。ここでは、@ Qualifierを利用した新たな@JapaneseというQualifierアノテーションを作成します。「Create Annotation」画面(クリックして拡大)CDISample->Java Resources->srcを右クリックして、New->Annotationを選択し、右のように入力し、Finishボタンを押します。作成した、Japanese.javaを以下のように書き換えます。赤字のQualifierを指定している部分がCDI特有の内容となります。HelloInJapanese.javapackage cdi;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.annotation.ElementType;import javax.inject.Qualifier;@Qualifier@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR})@Retention(RetentionPolicy.RUNTIME)public @interface Japanese {}この作成した@Japaneseアノテーションを以下のように、HelloInJapanese.javaに付与します。HelloInJapanese.javaのclass定義部の抜粋@Japanese@SessionScopedpublic class HelloInJapanese implements Hello, java.io.Serializable {(クリックして拡大)この状態で、TestServletを実行してみてください。この場合、先ほどのようなエラーが発生せずに、右のように、HelloInEnglishが実行されていることが分かります。これは、Hello実装クラスのうちHelloInJapanseは@Japanseアノテーションで限定されているため、特にTestServletで指定しない限りは、限定されていないデフォルトのHelloInEnglishが注入されます。(これは@Defaultという組み込みのQualifierによるものです。組み込みQualifierについては後述します。)次に、TestServletを以下のように@Japaneseを指定して実行すると、HelloInJapaneseが注入されるようになります。TestServlet.javaの抜粋public class HelloInJapanese implements Hello, java.io.Serializable { …略… @Inject@Japanese private Hello hello;(クリックして拡大)実行結果は右のようになります。なお、CDIには、組み込みの4つのQualifierが定義されています。(@Default, @Named, ,@New, @Any)ここで、簡単にそれぞれの意味を説明します。@Default@DefaultはデフォルトのQualifierを表します。もし、Beanに@Named以外のQualifierが定義されていない場合は、@Defaultが適用されます。以下の2つは同等になります。public class HelloInEnglish implements Hello {}@Defaultpublic class HelloInEnglish implements Hello {}@Named@Namedは、文字列ベースのQualifierです。使用例public class Car { @Inject @Named("driver") Seat driverSeat; @Inject @Named("passenger") Seat passengerSeat; ...}@Namedはvalue部分の文字列を指定しないような書き方もできます。以下のコードは、@Named(“paymentService”)と同じ意味になります。@Inject @Named PaymentService paymentService;また、@Namedで指定した文字列を利用して、JSPやJSFのEL式から@Namedで指定した文字列でInjectすることができるようになります。(@Namedを指定しない場合は、クラス名の頭を小文字にした文字列となります。)なお、上記のEL式から利用する用途以外で@Namedを利用することは、Beanの識別に文字列が使われてしまい、強い型保証(Strong typing)というCDIのメリットがなくなります。CDIの仕様書では、文字列でBeanを特定している古いコードと連携するような場合を除いて、@Namedを使用することは推奨しないと明記しています。@NewBeanのスコープ指定に関係なく、新しく@Dependentスコープでクラスを注入します。@Newで注入されたインスタンスは、@New Qualifierだけを持ち、@Defaultや@Anyを持ちません。(同じスコープで同じ@New Qualifierがあれば共有されます。)以下のような@SessionScopedのBeanがあった場合、@SessionScopedPublic class HelloInJapanese {次のように注入されたインスタンスは、同じSessionスコープにHelloInjapaneseが存在したとしても、@Dependentスコープをもつインスタンスを新たに作成します。@Inject @New(HelloInJapanese.class) Hello hello;@AnyすべてのBeanが持つQualifierです。(ただし、@New Qualified Beanは除く)。@Anyをインジェクションポイントに記述すると、すべてのBeanを参照できるようになります。少し解かりづらいですが、後ほどデコレータの説明で登場しますので、そちらで実際に動作を確認すると納得できると思います。@Producesの使い方上記のコードでは、コード中に@Japaneseアノテーションを記述して、静的にHelloInJapaneseを注入しました。例えば、Locale情報をもとに、動的にHelloに注入する実装クラスを選択したいという場合もあります。このような場合は@Producesアノテーションを使用して実現できます。まず、@Produces機能を利用するあらたな、@LocalLanguageというQualifierを作成します。以下のような@LocalLanguageというアノテーションを作成してください。LocalLanguage.javapackage cdi;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR})@Retention(RetentionPolicy.RUNTIME)public @interface LocalLanguage {}次に、Locale情報を見て、適切なHello実装クラスを返すクラスを作成します。以下のようなHelloGenerator.javaというクラスを作成してください。getHelloメソッドには、CDIの@Producesアノテーションと、先ほど作成した@LocalLanguageアノテーションを付与しておきます。getHelloメソッドの実装内容は、デフォルトのLocaleにより、日本語・英語を判断してそれぞれのHello実装クラスを返すというシンプルなものです。HelloGenerator.javapackage cdi;import java.util.Locale;import javax.enterprise.inject.Produces;import javax.enterprise.context.SessionScoped;public class HelloGenerator {@Produces @LocalLanguage @SessionScoped // ここでもスコープを定義することが可能 public Hello getHello() { Locale locale = Locale.getDefault(); if (locale.getLanguage().equals("ja")) { return new HelloInJapanese(); } else { return new HelloInEnglish(); } }}TestServlet.javaにも先ほどの@LocalLanguageアノテーションを付与します。TestServlet.javapublic class HelloInJapanese implements Hello, java.io.Serializable { …略… @Inject@LocalLanguage private Hello hello;TestServletを実行すると、デフォルトLocaleを元に、動的にHello実装クラスが注入されるようになります。@Producesは、他にもプリミティブ型の注入にも利用することができます。例えば、ランダムなint型の数値を@Producesを利用して注入してみます。まず、新たな、@RandomNumberというQualifierを作成します。RandomNumber.javapackage test;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.inject.Qualifier;@Qualifier@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)public @interface RandomNumber {}次に、RandomNumberGeneratorというクラスを作成し、以下のように実装します。RandomNumberGenerator.javapackage cdi;import java.util.Random;import javax.enterprise.context.ApplicationScoped;import javax.enterprise.inject.Produces;import javax.inject.Named;public class RandomNumberGenerator {private Random random = new Random(System.currentTimeMillis());@Produces@RandomNumberint getRandomNumber() {return random.nextInt(100);}}TestServlet.javaに以下のような内容を追記します。TestServlet.javapublic class TestServlet extends HttpServlet { …略… @Inject @RandomNumber private int randomNum; …略… protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("Shift_JIS"); PrintWriter out = response.getWriter(); out.print("<html><head><title>CDI Test</title></head><body>"); out.print("<h2> " + hello.sayHello("Duke") + "</h2>");out.print("<h2> Random Number: " + randomNum + "</h2>"); out.print("</body></html>"); } …略…TestServletを実行すると、ランダムな数字が出力されます。なお、int型などのプリミティブ型ではスコープ指定はできず、デフォルト・スコープのみとなります。@Alternativeの使い方コンポーネントを疎結合にすることで得られるメリットの一つとして、チームで開発をしている場合に、コンポーネントごとの開発を分離しやすいという点が挙げられます。この場合、まだ開発中のBeanを利用する側が単体テストを実行したい場合に、Beanのモック実装を利用したい場合があるかと思います。これを実現するための1つの手段とて、CDIでは@Alternativeアノテーションを利用することができます。まず、以下のようなMock用のBeanを作成し、@Alternativeアノテーションを付与します。HelloInJapaneseMock.javapackage cdi;import javax.enterprise.context.SessionScoped;import javax.enterprise.inject.Alternative;@SessionScoped@Japanese@Alternativepublic class HelloInJapaneseMock implements Hello, java.io.Serializable { private int count; @Override public String sayHello(String name) { count++; return "これは、テスト実行です。こんにちは " + name + "さん。: 呼び出し回数: " + count; }}@Alternativeアノテーションが付与さているBeanは、明示的に指定しない限りインジェクト対象にはなりません。なので、@Janaeseアノテーションが付与されているBeanが2つになりますが、この状態でTestServletを実行してもエラーにはなりません。この場合は、上記のHellInJapaneseMockは実行されず、HelloInJapaneseが実行されます。このHelloInJapaneseMockを動作させるには、beans.xmlに明示的にクラス情報を定義する必要があります。以下のように、WEB-INF/beans.xmlを記述してください。beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"><alternatives> <class>cdi.HelloInJapaneseMock</class> </alternatives></beans>この状態で、TestServletを実行すると、以下のようにHelloInJapaneseMockが実行されます。これは、テスト実行です。こんにちは Dukeさん。: 呼び出し回数: 1このように、@Alternativeアノテーションを利用することで、Beanの利用側のコードを変更することなく、実装を入れ替えることが可能となります。インターセプターの利用CDIのインターセプター機能は、いわゆるアスペクト指向プログラミング(Aspect Oriented Programming、略してAOP)を実現するための機能です。インターセプター機能は、業務ロジックには直接関係ないモジュールに横断的な処理の記述に利用できます。例えば、Beanの呼び出しでログを出力したり、特定のメソッドがコールされた場合に、認証チェックを実施するなどの処理などがあげられます。このような処理を本来の業務ロジックとのコード上の依存性を排除することで、メンテナンス性の高いコードを記述できます。今回は、HelloのsayHelloメソッドが呼ばれるたびに、標準出力にログを出力するというシンプルな機能をインターセプターを利用して実行してみます。まずは、インターセプター・バインディング・タイプを定義します。以下のようなアノテーションを作成してください。Loggable.javapackage cdi;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.interceptor.InterceptorBinding;@InterceptorBinding@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface Loggable {}次に、インターセプターを実行するクラスを作成します。以下のようなクラスを作成します。下記は、logメソッドの中で、標準出力にインジェクトされたインスタンスのクラスやメソッドの情報を標準出力に出力しています。なお、インターセプターを利用するBeanが@SessionScopeなどを指定したPassivation capable beanの場合は、インターセプターをSerializableにしておく必要がありますのでご注意ください。LogInterceptor.javapackage cdi;import javax.interceptor.AroundInvoke;import javax.interceptor.Interceptor;import javax.interceptor.InvocationContext;@Loggable@Interceptorpublic class LogInterceptor implements java.io.Serializable {@AroundInvokepublic Object log(InvocationContext ctx) throws Exception {System.out.println("class : " + ctx.getMethod().getDeclaringClass().getName() + " :method : " + ctx.getMethod().getName() + " is called!");Object obj = ctx.proceed();return obj;}}インターセプタークラスを有効化するためにbeans.xmlにクラス情報を記述する必要があります。以下のようにWEB-INF/beans.xmlを修正します。beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"><interceptors> <class>cdi.LogInterceptor</class> </interceptors></beans>最後に、インターセプトしたいBeanにインターセプター・バインディング・タイプ(@Loggable)を指定します。HelloInJapanese.java@SessionScoped@Loggablepublic class HelloInJapanese implements Hello, java.io.Serializable { …略…}この状態で、TestServletを実行してみてください。ブラウザをリロードするたびに以下のように標準出力に情報が出力され、処理がインターセプトされていることを確認できます。class : cdi.HelloInJapanese :method : sayHello is called!デコレータの利用CDIのデコレータは、インターセプターと似ていますが、Beanの処理をオーバーラップして、業務ロジックに対して追加の処理を実行することが可能となる機能です。インターセプターとの違いは、インターセプターは業務ロジックには関連しない、横断的関心事(Cross-Cutting Concerns)を扱うのに対して、デコレータは業務ロジックに処理を追加します。それでは、デコレータ機能を利用するコードを記述してみます。今回は、HelloのsayHelloメソッドの戻り値に、デコレータ機能により文字列を追加して返すというシンプルな機能を実装します。まず、以下のようなデコレータクラスを作成してください。@Anyにより、すべてのHello Beanに対してデコレータが実行されます。HelloのsayHelloのメソッドの戻り値に”Decorate:”という文字列が付与されるようになります。HelloDecorator.javapackage cdi;import java.io.Serializable;import javax.decorator.Decorator;import javax.decorator.Delegate;import javax.enterprise.inject.Any;import javax.inject.Inject;@Decoratorpublic abstract class HelloDecorator implements Hello, Serializable {@Inject@Delegate@Any // @Anyによりデコレータ対象をすべてのHello Beanに指定するprivate Hello hello;@Overridepublic String sayHello(String name) {String res = hello.sayHello(name);return "Decorate: " + res;}}デコレータを有効化するには、インターセプターと同様に、beans.xmlにクラス情報を追記する必要があります。beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"><interceptors><class>cdi.LogInterceptor</class></interceptors><decorators><class>cdi.HelloDecorator</class></decorators></beans>それでは、TestServletを実行してみてください。以下のように出力される文字列に”Decorate:”が追加されます。Decorate: こんにちは Dukeさん。: 呼び出し回数: 1おまけ上記のDecoratorは@Anyを指定しているため、すべてのHello Beanを対象にしていますが、例えば、以下のように@Japaneseを付与すれば、HelloInJapaneseに限定してデコレートすることも可能です。いろいろと試してみてください。HelloDecorator.javaの抜粋 @Inject @Delegate@Japanese // @Japaneseによりデコレータ対象をHelloInJapaneseのみ private Hello hello;まとめ今回はCDIの概要について簡単に説明し、実際にアプリケーションを動作させて、CDIの基本的な機能を試してみました。@Injectによる注入スコープ指定@Qualifierによる実装の指定@Producesの使い方@Alternativeの使い方インターセプターの利用デコレータの利用CDIを利用すると、今までのアプリケーションの大きく違ったコーディングスタイルになることが実感できたかと思います。これにより、簡単に疎結合なメンテナンスしやすいコードをJava EE標準のコーディングとして記述できます。次回は、これまで連載してきた、JSF/JPA(EJB)/JAX-RSとCDIを連携した簡単なアプリケーションを作成します。お楽しみに。

本連載では、サンプル・アプリケーションの開発を通じてJava Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。今回から2回にわたって、Contexts and Dependency Injection for the Java EE platform(CDI)をとりあげます。DIの仕組みは、Java EE 5から一部のJava...

07. イベント/セミナー

WebLogic Server勉強会@東京:5月開催のお知らせ

2013年5月23日(木)に「第36回 WebLogic Server勉強会@東京」を開催します。今月は「今日から始めるトラブル・シューティング - Flight Recorder入門」と「LightningTalksセッション」の2セッションです。WebLogicServer上のアプリケーションのスローダウンや異常終了など想定外の不具合が発生した場合は原因の分析や対処が必要になります。前半のセッションでは、トラブル・シューティングについて、一般的な概要と、FlightRecorderを使用した手法について紹介します。後半は、WebLogic Server関連の話題をお届けするLightning Talksセッションです。WebLogic Server の開発モードと本番モード (仮称)CTC伊藤忠テクノソリューションズ株式会社 山田 貴裕氏Java EE7 Java Batch API」日本オラクル株式会社 松林 晶東京近郊の皆様、5月23日(木) には仕事を早めに切り上げ、午後6時30分にオラクル青山センターに集合しませんか?2013年5月23日(木)18:30~20:30 (受付開始 18:00~) オラクル青山センター〒107-0061 東京都港区北青山2-5-8詳細および登録は こちら から。

2013年5月23日(木)に「第36回 WebLogic Server勉強会@東京」を開催します。 今月は「今日から始めるトラブル・シューティング - Flight Recorder入門」と「Lightning Talksセッション」の2セッションです。 WebLogic Server上のアプリケーションのスローダウンや異常終了など想定外の不具合が発生した場合は原因の分析や対処が必要になります。前半のセ...

05. コラム - WebLogic勉強会 通信

Active GridLink for RAC 入門

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。4月25日に開催された「第35回WebLogic Server勉強会@東京」の前半の「Active GridLink for RAC 入門」(日本オラクル オラクルユニバシティ 岡田大輔)セッションをレポートします。今回のテーマはWebLogic Serverのデータソースで提供されているActive GridLink for RACの仕組みと構成です。GridLinkデータソースを活用することでOracle Real Application Clusters (RAC)の機能をフルに活用できます。日本電気株式会社からActive GridLinkのオラクルとの共同WhitePaperの紹介がありました。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)GridLinkとはGridLinkデータソースはWebLogic Server上のアプリケーションに対してOracle RACとの連携を最大限に活かす機能を提供しています。下記のように、構成容易性の向上を目的としたSingle Client Access Name(SCAN) 対応、可用性の向上のためにRACからの通知による高速接続フェールオーバ(FCF)を強化したり、性能の向上のためにRACの負荷状況を考慮した実行時接続ロードバランシング(RLCB)、XAトランザクション・アフィニティ、Webセッション・アフィニティ(WLS12.1.1~)を提供しています。 GridLinkデータソースの仕組みGridLinkデータソースは、Oracle RACのUCPの機能と統合されています。したがって、下図の構成のようにONS (Oracle Notification Service)RAC側の情報をFANイベントとして送信する仕組み、FAN (Fast Application Notification )RAC側の死活情報、負荷情報などを含んだ情報、UCP ( Universal Connection Pool)GridLinkデータソースがFANイベント情報を扱うために内部で利用、ロード・バランシング・アドバイザ RACのサービスレベルでの負荷状況をFANを通じてアプリケーションに提供、など細かいレベルでOracle RAC側とシームレスな連携が可能です。 アプリケーションの変更は不要Active GridLink for RACを使用するためにはWebLogic Server Suiteライセンスが必要です。このセッションを通じてOracle RACとWebLogic Serverの親和性を高めるための数々の機能が紹介されました。(DB障害の即時検知機能やSCAN対応による運用性の向上、動的負荷分散やアフィニティ機能による性能の向上)また、設定の部分は割愛させていただきましたが、管理コンソールを使って適切に設定することでアプリケーション側には特別なプログラミングや設定をせずにOracle RACの機能をフルに使用することができます。 最後に簡単にセッションを振り返ってみました。詳細は、「Active GridLink for RAC 入門」をご覧ください。実際の設定手順や注意点などが記述されています。なお、WebLogic ChannelではGridLinkに関する情報がアップされていますので、併せてご活用ください。GridLinkの機能を説明する岡田さん GridLinkの共同ホワイトペーパの紹介をする日本電気株式会社の柏木氏日本電気株式会社の柏木氏からActive GridLinkホワイトペーの紹介がありました。

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 4月25日に開催された「第35回WebLogic Server勉強会@東京」の前半の「Active GridLink for RAC 入門」(日本オラクル オラクルユニバシティ 岡田大輔)セッションをレポートします。今回のテーマはWebLogic...

04. 実践! Java EE 6

[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(7) JAX-RS 第2回

本連載は、サンプル・アプリケーションの開発を通じてJava Platform, Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。前回はOEPEとWebLogic Server12cを使ってJAX-RSのサンプルアプリを実装しました。第2回では第1回に続き、JAX-RSのプログラミングを行っていきます。その中で、WebLogic Server12c上でJAX-RSを開発するときのポイントとなるJerseyのアップグレード方法やJAX-RSのトレース方法、セキュリティの設定についてもご紹介します。(日本オラクル Fusion Middleware事業統括本部 関屋信彦)JAX-RSのトレース方法いきなりですが、最初にWebLogic Server12cにおけるJAX-RSのトレース方法について紹介したい思います。このトレースを出力させることで開発中のデバッギング作業が大分楽になります。やり方は簡単です。web.xmlにパラメータを追加するだけです。web.xml (変更) ※赤文字の部分を追加してください <servlet><description>JAX-RS Tools Generated - Do not modify</description><servlet-name>JAX-RS Servlet</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param><param-name>com.sun.jersey.config.feature.Trace</param-name><param-value>true</param-value></init-param><load-on-startup>1</load-on-startup></servlet>追加後、前回同様、「Project Explorer」ペインで「JaxRsSample1」を右クリックし、「Run as」→「Run on Server」からアプリケーションを実行します。そして、前回と同じようにWindowsのコマンドプロンプトを開き、前回作成したput_msg1.jsonのテキストが置いてあるフォルダに移動し、次のコマンドを実行します。curl -X PUT -i -H "Content-type: application/json" -d @put_msg1.json http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001レスポンスには、トレース情報が含まれてきます。HTTP/1.1 204 No ContentDate: Fri, 26 Apr 2013 06:43:27 GMTContent-Length: 0X-Jersey-Trace-010: matched message body reader: class org.codehaus.jettison.json.JSONObject, "application/json" -> com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App@29a4b80X-Jersey-Trace-002: accept right hand path java.util.regex.Matcher[pattern=/messages(/.*)? region=0,20 lastmatch=/messages/uid-abc001]: "/messages/uid-abc001" -> "/messages" : "/uid-abc001"X-Jersey-Trace-008: accept resource methods: "messages/uid-abc001", PUT -> jaxrssample1.resource.UserMessagesResource@2bea0a0X-Jersey-Trace-009: matched resource method: public void jaxrssample1.resource.UserMessagesResource.setUserMessage(org.codehaus.jettison.json.JSONObject) throws org.codehaus.jettison.json.JSONExceptionX-Jersey-Trace-006: accept sub-resource locator: "messages" : "/uid-abc001" -> @Path("/uid-{userid}") jaxrssample1.resource.MessagesResource@2be81c7.getUserMessages(java.lang.String) = jaxrssample1.resource.UserMessagesResource@2bea0a0X-Jersey-Trace-007: match path "" -> "/seq-([^/]+?)(/.*)?", ""X-Jersey-Trace-004: match path "/uid-abc001" -> "/uid-([^/]+?)(/.*)?", ""X-Jersey-Trace-005: accept right hand path java.util.regex.Matcher[pattern=/uid-([^/]+?)(/.*)? region=0,11 lastmatch=/uid-abc001]: "/uid-abc001" -> "/uid-abc001" : ""X-Powered-By: Servlet/3.0 JSP/2.2X-Jersey-Trace-003: accept resource: "messages" -> @Path("/messages") jaxrssample1.resource.MessagesResource@2be81c7X-Jersey-Trace-000: accept root resource classes: "/messages/uid-abc001"X-Jersey-Trace-001: match path "/messages/uid-abc001" -> "/application\.wadl(/.*)?", "/messages(/.*)?"トレース行の頭にX-Jersey-Trace-xxxの形式でシーケンス番号があり、これがサーバー側で処理された順番を表します。出力される行の順番が必ずしもシーケンス順でないことに注意してください。トレースを見ていただくとわかる通り、これでURLが正しく@Pathで指定したパスにマッチしているかや、どのJAX-RSリソースクラスやリソースメソッドが使われているかがわかります。そして何より、今まで目に見えなかったエンティティプロバイダの情報を表示してくれます。これで送られてきたデータを、JAX-RSのリソースメソッドの引数の型のインスタンスに変換してくれている実体を把握することができます。今回の例では、JSON形式のデータをjettisonライブラリのJSONObject型に変換してくれているのは、jerseyライブラリのJSONObjectProviderであることがわかります。X-Jersey-Trace-010: matched message body reader: class org.codehaus.jettison.json.JSONObject, "application/json" -> com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App@29a4b80この記事では、以降はトレースがOFFになっているものとして出力ログを記載します。GETでメッセージリストを取得前回は、メッセージの投稿と、メッセージIDを指定してのメッセージの取得を、それぞれ/messages/uid-{userid}のパスに対するPUTと/usermessages/uid-{userid}/seq-{usermessageid}のパスに対するGETとして実装しました。今回は残り2つの処理を実装したいと思います。URIパス(リソース)HTTPメソッド説明/messagesGETWebサービス内の全メッセージを表すリソースです。GETにより一覧を取得できます。/messages/uid-{userid}例: /messages/uid-sekiya123GET/PUT指定されたユーザーIDの全てのメッセージを表すリソースです。PUTによりそのユーザーのメッセージを投稿できます。/messages/uid-{userid}/seq-{usermessageid}例:/messages/uid-sekiya123/seq-1GET各ユーザーの個々のメッセージを表します。ユーザー内で一意なユーザーメッセージIDで指定します。まずは特定ユーザーに関する全てのメッセージを取得する処理を実装します。これは/messages/uid-{userid}に対するGETとして実装します。/messages/uid-{userid}に対応するリソースクラスはUserMessagesResourceクラスでした。新しくgetUserMessagesというJavaメソッドをこのクラスに追加し、この処理を実装しましょう。そしてこれに@GETをつけることで呼び出し可能となります。getUserMessagesでは以下のことを行います。メッセージが保存されているクラス(StaticMemory)からuserid指定でそのユーザーのメッセージを全てリストとして取得します。JSONArrayというJettisonライブラリの配列型に情報を変換してgetUserMessagesの戻り値とします。@Produces("application/json")もつけ、出力はJSONに限定させます。その時に、追加の情報としてそれぞれのメッセージのURLを含めます。これにより、クライアントアプリケーションはメッセージの一覧を受け取った後に、特定のメッセージの詳細にアクセスする手段を得ることができます。一覧で渡す情報は最小限にし、あとは詳細を見る、といった使い方ができます。URLの作成にはJAX-RSのAPIであるUriBuilderを使います。これで簡単にURLを作成できます。UriBuilderはUriInfoというクラスから取得できますが、そのUriInfoはJAX-RSのコンテキスト情報経由で取得できます。JAX-RSのコンテキストは「@Context コンテキストタイプの型 変数名」という記述を、リソースクラスのフィールド変数あるいはリソースメソッドの引数として書けば、そこにインジェクションされます。コンテキストタイプとしてどのようなものがあるかはJAX-RS1.1の仕様書に記載されており、UriInfo、HttpHeaders、Requeest、SecurityContext、Providersといった型があります。 ここで実装するgetUserMessagesのJavaメソッドは@GETが付加されることでJAX-RSのリソースメソッドとなるので、引数として@Context UriInfoをインジェクションすることが可能となります。UserMessagesResource.java (追加)@GET@Produces("application/json")public JSONArray getUserMessages(@Context UriInfo uriInfo) {List<Message> msglist = StaticMemory.getMessage(userid);if (msglist == null) {return null;}JSONArray uriArray = new JSONArray();for (Message msg : msglist) {try {uriArray.put(MessageJSONBind.getJSON(msg).append("url", getUri(uriInfo, msg)));} catch (JSONException e) {e.printStackTrace();}}return uriArray;}private String getUri(UriInfo uriInfo, Message msg) {UriBuilder ub = uriInfo.getAbsolutePathBuilder();URI userMessageUri = ub.path("seq-{usermessageid}").build(Integer.toString(msg.getUserMessageId()));return userMessageUri.toString();}全ユーザーのメッセージの取得処理次に、全ユーザーのメッセージ取得です。/messagesのパスに対するGETで取得できるようにします。/messagesに対するリソースクラスはMessagesResourceでした。さきほどと同じようなやり方で実装していきます。ただ、返すメッセージ情報はデータ量を減らす意味でメッセージ本文は含めず、タイトルだけとします。MessagesResource.java (追加)//ルートリソースクラス(クラス定義の上に@Pathが指定されているクラス)はフィールド変数にコンテキスト情報をインジェクションできます@Context UriInfo uriInfo;@GET@Produces("application/json")public JSONArray getMessages() {List<Message> msglist = StaticMemory.getAll();JSONArray uriArray = new JSONArray();for (Message msg : msglist) {try {uriArray.put(MessageJSONBind.getJSONSmall(msg).put("url", getUri(msg)));} catch (JSONException e) {e.printStackTrace();}}return uriArray;}private String getUri(Message msg) {UriBuilder ub = uriInfo.getAbsolutePathBuilder();URI userMessageUri = ub.path("/uid-{userid}").path("seq-{usermessageid}").build(msg.getUserid(), Integer.toString(msg.getUserMessageId()));return userMessageUri.toString();}MessageJSONBind.java (追加)public static JSONObject getJSONSmall(Message msg) {try {return new JSONObject().put("userid", msg.getUserid()).put("title", msg.getTitle()).put("posttime", msg.getPosttime());} catch (JSONException je) {return null;}}Response型の利用前回、PUTによるメッセージの投稿の処理をUserMessagesResourceクラスのsetUserMessageのJavaメソッドとして実装しましたが、このときのレスポンスとしてそのメッセージのアドレスであるURLをユーザーに返した方が親切なので、その実装を追加したいと思います。さらに、HTTPのステータスコードとして201 Createdを返すようにします。そうすることで、ユーザーに対して、投稿した情報が作成されたことを明確に示すことができます。このようにHTTPのレスポンスに色々な情報をつけたい場合はJAX-RS APIのResponse型を使います。UserMessagesResourceのsetUserMessageに対しての変更コードです。今まで戻り値はvoidでしたが、ここでResponse型を返すようにするのがポイントです。UserMessagesResource.java (変更) ※赤い文字列が変更部分です@PUT@Consumes("application/json")public Response setUserMessage(@Context UriInfo uriInfo, JSONObject jsonEntity) throws JSONException {Message msg = new Message();msg.setUserid(userid);int usermessageid = 0;if (!jsonEntity.isNull("usermessageid")) {usermessageid = jsonEntity.getInt("usermessageid");}msg.setUserMessageId(usermessageid);msg.setPosttime(new java.util.Date());msg.setTitle(jsonEntity.getString("title"));msg.setMessage(jsonEntity.getString("message"));StaticMemory.putMesasge(msg);URI usermessageUri = uriInfo.getAbsolutePathBuilder().path("seq-{usermessageid}").build(msg.getUserMessageId());ResponseBuilder response = Response.created(usermessageUri);response.entity("Message posted as id: " + msg.getUserMessageId());return response.build();}テストここまでの実装を、実際にテストで確認します。前回同様、「Project Explorer」ペインで「JaxRsSample1」を右クリックし、「Run as」→「Run on Server」からアプリケーションを実行します。そして、前回と同じようにWindowsのコマンドプロンプトを開き、前回作成したput_msg1.jsonのテキストが置いてあるフォルダに移動し、次のコマンドを実行します。curl -X PUT -i -H "Content-type: application/json" -d @put_msg1.json http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001そうすると、次のレスポンスが返ってきます。HTTP/1.1 201 CreatedDate: Wed, 24 Apr 2013 21:43:37 GMTTransfer-Encoding: chunkedLocation: http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/seq-1Content-Type: application/jsonMessage posted as id: 1201 Createdのステータスコードが返り、Http ヘッダのLocationとして作成されたメッセージへのURLを返すことができました。curlのGETでこのLocationへのURLを指定してみましょう。前回と同じコマンドになり、前回同様のレスポンスが得られます。curl -X GET -i -H "Accept: application/json" http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/seq-1HTTP/1.1 200 OKDate: Wed, 24 Apr 2013 22:00:31 GMTTransfer-Encoding: chunkedContent-Type: application/json{"userid":"abc001","usermessageid":1,"title":"today tweet","message":"Is this going to end??","posttime":"Thu Apr 25 07:00:01 JST 2013"}何気なく前回のテストと全くと同じURLを指定したわけですが、前回は開発したのが私たち自身だったのでURLの書き方がわかっていました。しかし、今回はサーバーから通知されたURLを使ったという違いがあります。JAX-RSはステートレスなアプリケーションが基本であるため、このように各種リソースのURLをクライアントに通知することが重要になってきます。そのためにもUriBuilderなどのAPIがJAX-RSにはあります。次に、同じcurlのPUT処理を何回か実行し、複数のメッセージを投稿してください。また、ユーザーIDをuid-abc001からuid-def002に変更し、同じく何度かメッセージを投稿してください。この後、特定のユーザーの全メッセージの取得を行います。curl -X GET -i -H "Accept: application/json" http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/レスポンスとして、そのユーザーabc001の全てのメッセージが取得できました。HTTP/1.1 200 OKDate: Wed, 24 Apr 2013 22:13:14 GMTTransfer-Encoding: chunkedContent-Type: application/json[{"userid":"abc001","usermessageid":1,"title":"today tweet","message":"Is this going to end??","posttime":"Thu Apr 25 07:00:01 JST 2013","url":["http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-1"]},{"userid":"abc001","usermessageid":2,"title":"today tweet","message":"Is thisgoing to end??","posttime":"Thu Apr 25 07:00:03 JST 2013","url":["http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-2"]},{"userid":"abc001","usermessageid":3,"title":"today tweet","message":"Is this going to end??","posttime":"Thu Apr 25 07:12:05 JST 2013","url":["http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-3"]}]次にURLを変えて全ユーザー分の情報を取得しましょう。curl -X GET -i -H "Accept: application/json" http://localhost:7001/JaxRsSample1/jaxrs/messages/レスポンスとして、そのユーザーabc001とdef002の両方のメッセージを取得できました。こちらの方は意図したとおりmessage本文は含まれていません。HTTP/1.1 200 OKDate: Wed, 24 Apr 2013 22:15:45 GMTTransfer-Encoding: chunkedContent-Type: application/json[{"userid":"abc001","title":"today tweet","posttime":"Thu Apr 25 07:00:01 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-1"},{"userid":"abc001","title":"today tweet","posttime":"Thu Apr 25 07:00:03 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-2"},{"userid":"abc001","title":"today tweet","posttime":"Thu Apr 25 07:12:05 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-abc001\/seq-3"},{"userid":"def002","title":"today tweet","posttime":"Thu Apr 25 07:12:11 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-def002\/seq-1"},{"userid":"def002","title":"today tweet","posttime":"Thu Apr 25 07:12:13 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-def002\/seq-2"},{"userid":"def002","title":"today tweet","posttime":"Thu Apr 25 07:12:14 JST 2013","url":"http:\/\/localhost:7001\/JaxRsSample1\/jaxrs\/messages\/uid-def002\/seq-3"}]全メッセージが取得されていますが、JAX-RSの@QueryParamを使えば、GET時のURLにパラメータを追加でき、例えばhttp://localhost:7001/JaxRsSample1/jaxrs/messages?count=10のように取得数を指定することも可能です。この辺りはご自身で試してみてください。JAXBを使ってJSONとXMLの両方に対応前回はJettisonというJSONライブラリを使ってJSONObjectのインスタンスを作成し、Jerseyに含まれるエンティティプロバイダがJSONObjectのインスタンスをHTTP出力に変換していました。今回は、JSON形式以外に、XMLの形式も出力させたいと思います。使用するのはJAXBです。JAXBは、Javaに含まれるXMLのライブラリですが、JAXBを使ったままJSON出力にも対応できます。前回のJettisonライブラリを使ったやり方は、シンプルで柔軟にJSON出力できるのですが、JAXBに慣れている方は今回のやり方でJSON出力させてもいいかもしれません。Jerseyのアップグレード図1: JerseyアップグレードのWEB-INF/lib構成(クリックして拡大)実は、JAXBを使ってのJSONデータ形式を出力するには、Jerseyをアップグレードする必要があります。よってここではJAXB対応前にWebLogic Server12cを使った場合のJerseyのアップグレード方法を紹介します。アップグレードの基本的なやり方はRESTful Webサービスの開発に紹介されていますがライブラリを取得するところなどは紹介されていないので、ここでは一例として紹介させていただきます。まずはJerseyを自分でダウンロードします。Jerseyのサイトに行き、1.xxの最新のバージョンをダウンロードします。今回は1.17のバージョンをダウンロードします。その他のjettisonやjackson系のライブラリを含め、プロジェクトのWEB-INF/lib配下にjarライブラリをコピーします。確認したところ図のライブラリが今回のアプリケーションを動かすのに最低限必要なライブラリでした。次に、WebContent/weblogic.xmlの編集が必要となります。ここではさきほどWEB-INF/libにコピーしたjarが使われるように明示的に設定を行う必要があります。通常WEB-INF/lib配下にコピーしたjarはweblogic.xmlの設定なく使うことができますが、今回のようにWebLogic Server12cの本体(システムクラスローダーで読み込まれるクラス)で使用されているクラス(Jersety1.9版)と同じクラスをWEB-INF/libに入れる場合は、設定が必要になります。そうしないと本体で使用されている古いクラスの方が使われてしまいます。weblogic.xml (変更) ※赤文字の部分が追加個所です<?xml version="1.0" encoding="UTF-8"?><wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <wls:weblogic-version>12.1.1</wls:weblogic-version> <wls:context-root>JaxRsSample1</wls:context-root> <wls:container-descriptor> <wls:prefer-application-packages> <!-- jersey-bundle-*.jar --> <wls:package-name>com.sun.jersey.*</wls:package-name> <wls:package-name>com.sun.research.ws.wadl.*</wls:package-name> <wls:package-name>com.sun.ws.rs.ext.*</wls:package-name> <!-- Jackson-*.jar --> <wls:package-name>org.codehaus.jackson.*</wls:package-name> <!-- jettison-*.jar --> <wls:package-name>org.codehaus.jettison.*</wls:package-name> <!-- jsr311*.jar --> <wls:package-name>javax.ws.rs.*</wls:package-name> <!-- asm.jar --> <wls:package-name>org.objectweb.asm.*</wls:package-name> </wls:prefer-application-packages> </wls:container-descriptor></wls:weblogic-web-app>MessageクラスのJAXB対応MessageクラスをJAXB対応するためにはいくつかのJAXBアノテーションをつけるだけで基本的にOKです。ただ、今回はjava.util.Date型の日時を文字列に変換するためにDateAdapterというクラスを作って一つ工夫を入れています。Message.java (変更) ※赤文字の部分が変更個所です@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class Message {@XmlElement(name="message")private String message;@XmlElement(name="userid")private String userid;@XmlElement(name="posttime")@XmlJavaTypeAdapter(jaxrssample1.util.DateAdapter.class)private Date posttime;@XmlElement(name="usermessageid")private int userMessageId;@XmlElement(name="title")private String title;DateAdapter.java (jaxrssample1.utilパッケージ)package jaxrssample1.util;import java.text.SimpleDateFormat;import java.util.Date;import javax.xml.bind.annotation.adapters.XmlAdapter;public class DateAdapter extends XmlAdapter<String, Date> {@Overridepublic String marshal(Date date) throws Exception {SimpleDateFormat sf = new SimpleDateFormat("yyyy/mm/dd hh:mm:ss");return sf.format(date);}@Overridepublic Date unmarshal(String date) throws Exception {SimpleDateFormat sf = new SimpleDateFormat("yyyy/mm/dd hh:mm:ss");return sf.parse(date);}}今回はPUTによるメッセージの投稿と、GETによるユーザーの全メッセージ取得の部分だけをJAXB版に変更したいと思います。よって、UserMessageResourceクラスのsetUserMessageと、getUserMessagesを変更するわけですが、前回の同メソッドはコメントアウトし、今回のJAXB版は新しく作成してください。前回の同メソッドのコードと比べMessageクラスをそのままJAX-RSリソースメソッドの引数や戻り値として使えるようになり、大分コードが簡略化されました。UserMessagesResource.java (追加)//※前のsetUserMessageとgetUserMessagesはコメントアウトしてください@PUT@Consumes({"application/json", "application/xml"})public Response setUserMessage(@Context UriInfo uriInfo, Message msg) throws JSONException {msg.setUserid(userid);StaticMemory.putMesasge(msg);URI usermessageUri = uriInfo.getAbsolutePathBuilder().path("seq-{usermessageid}").build(msg.getUserMessageId());ResponseBuilder response = Response.created(usermessageUri);response.entity("Message posted as id: " + msg.getUserMessageId());return response.build();}@GET@Produces({"application/json", "application/xml"})public List<Message> getUserMessages(@Context UriInfo uriInfo) {return StaticMemory.getMessage(userid);}テストでは、ここで再度「Run on Server」で再デプロイを行い、テストしてきましょう。投稿する情報はxml形式のファイルとして新しく作成します。put_msg1.xmlとします。put_msg1.xml<message><message>I want to post a xml message</message><title>Mesage By Xml</title></message>curlコマンドではContent-typeをapplication/xmlに変更するのがポイントです。@で指定するファイル名の変更も忘れないようにしてください。curl -X PUT -i -H "Content-type: application/xml" -d @put_msg1.xml http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001そうすると、次のレスポンスが返ってきます。HTTP/1.1 201 CreatedDate: Thu, 25 Apr 2013 02:33:56 GMTTransfer-Encoding: chunkedLocation: http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/seq-1Content-Type: text/plainMessage posted as id: 1今度はuid-abc001のメッセージリストを取得しましょう。curlコマンドの中のAcceptをapplication/xmlとするのがポイントです。curl -X GET -i -H "Accept: application/xml" http: //localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/そうすると、次のレスポンスが返ってきます。HTTP/1.1 200 OKDate: Thu, 25 Apr 2013 02:34:10 GMTTransfer-Encoding: chunkedContent-Type: application/xml<?xml version="1.0" encoding="UTF-8" standalone="yes"?><messages><message><message>I want to post a xml message</message><userid>abc001</userid><posttime>2013/33/25 11:33:56</posttime><usermessageid>1</usermessageid><title>Mesage By Xml</title></message></messages>次にjson形式も試してみます。curl -X GET -i -H "Accept: application/json" http: //localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001/そうすると、次のレスポンスが返ってきます。HTTP/1.1 200 OKDate: Thu, 25 Apr 2013 02:36:07 GMTTransfer-Encoding: chunkedContent-Type: application/json{"message":[{"message":"I want to post a xml message","userid":"abc001","posttime":"2013/33/25 11:33:56","usermessageid":"1","title":"Mesage By Xml"},{"message":"Is this going to end??","userid":"abc001","posttime":"2013/35/25 11:35:56","usermessageid":"2","title":"today tweet"}]}JAX-RSのセキュリティ対応現時点ではメッセージの投稿を誰でもできてしまっています。ここではメッセージの投稿は登録されたユーザーのみ、自身のユーザーIDに対して投稿できるようにセキュリティをかけたいと思います。今回ご紹介する方法は最もシンプルなやり方です。BASIC認証を使い、認証するユーザーは予めWebLogicに登録するやり方です。まず、WebLogicへのユーザーの登録です。WebLogicの管理コンソールで登録するので次のURLでアクセスしてください。http://localhost:7001/consoleセキュリティ・レルムをクリックします。次の画面ではデフォルトのmyrealmという設定があるので、そのリンクをクリックします。図2: WebLogic管理コンソール(クリックして拡大)「ユーザーとグループ」タブを開きます。図3: セキュリティ・レルム - ユーザー画面(クリックして拡大)ここにユーザーとしてabc001を登録します。「新規」ボタンをクリックし、次の画面では「名前」にabc001、「パスワード」にwelcome1と入力して「OK」を押します。次にグループrestuserを登録します。グループを登録することで、後のweb.xmlでの指定で個々のユーザー名を指定せずに済みます。「グループ」タブを開き、「新規」ボタンを押し、次の画面で「名前」にrestuserを入力し、「OK」を押します。図4: グループへのユーザーの登録(クリックして拡大)「ユーザー」タブを開き、さきほど作成したabc001ユーザーのリンクをクリックします。次に「グループ」タブを開き、さきほど作成したrestuserを選択済みに移動して保存します。次にweb.xmlの設定です。次のように追加してください。ポイントはセキュリティをかけるURLとそのHTTPメソッドを絞っていることです。今回はPUTによるメッセージの投稿処理にだけ、セキュリティをかけて勝手にメッセージを投稿できないようにします。web.xml (変更) ※赤文字が追加部分です(上部省略)<servlet-mapping><servlet-name>JAX-RS Servlet</servlet-name><url-pattern>/jaxrs/*</url-pattern></servlet-mapping><security-constraint><web-resource-collection><web-resource-name>MessagesResource</web-resource-name><url-pattern>/jaxrs/messages/*</url-pattern><http-method>PUT</http-method></web-resource-collection><auth-constraint><role-name>user</role-name></auth-constraint></security-constraint><login-config><auth-method>BASIC</auth-method><realm-name>default</realm-name></login-config><security-role><role-name>user</role-name></security-role></web-app>weblogic.xmlではweb.xmlのsecurity-roleのrole-nameと、管理コンソールで登録したユーザー名またはグループ名を関連付けます。ここではグループrestuserに関連付けます。weblogic.xml (変更) ※赤文字が追加部分です(上部省略) <wls:context-root>JaxRsSample1</wls:context-root><security-role-assignment><role-name>user</role-name><principal-name>restuser</principal-name></security-role-assignment>(下部省略)では、さっそくテストしてみます。Eclipseの「Run on Server」で再デプロイを行ってください。まずは今まで通りのPUTコマンドを実行します。curl -X PUT -i -H "Content-type: application/json" -d @put_msg1.json http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001「HTTP/1.1 401 Unauthorized」というレスポンスが返ってくるはずです。セキュリティがかかりました。認証情報としてcurlのパラメータにユーザーとパスワードを渡します。curl –u abc001:weblogic1 -X PUT -i -H "Content-type: application/json" -d @put_msg1.json http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001「HTTP/1.1 201 Created」となり、うまく認証されたことがわかります。次は認証情報なしでそのユーザーのメッセージをGETで取得できることを確認してください。curl -X GET -i -H " Accept: application/json" http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-abc001現時点では自分が認証さえされればPUT時に自分以外のユーザーIDをURLパスに指定してもメッセージが投稿できてしまいます。今回のアプリケーションでは、これを防ぐにはJAX-RSリソースメソッド内で認証情報とURLパス上のuseridをマッチングする方法をとりたいと思います。認証情報はJAX-RS APIの@Context SecurityContextからアクセスできます。PUT処理を実装しているUserMessagesResourceクラスのsetUserMessageメソッドの引数にこのパラメータを追加します。URLパス上のユーザーIDと認証時のIDがマッチしない場合、HTTPステータスコード403を返すようにします。UserMessagesResource.java ※赤文字が変更箇所です@PUT@Consumes({"application/json", "application/xml"})public Response setUserMessage(@Context UriInfo uriInfo, @Context SecurityContext sc, Message msg) throws JSONException {String username = sc.getUserPrincipal().getName();if (!username.equals(userid)) {ResponseBuilder response = Response.status(403);return response.build();}msg.setUserid(userid);StaticMemory.putMesasge(msg);URI usermessageUri = uriInfo.getAbsolutePathBuilder().path("seq-{usermessageid}").build(msg.getUserMessageId());ResponseBuilder response = Response.created(usermessageUri);response.entity("Message posted as id: " + msg.getUserMessageId());return response.build();} 再度アプリケーションを実行します。認証時はabc001ユーザーとし認証し、URLパス上はdef002のユーザーIDを指定してみましょう。curl -u abc001:welcome1 -X PUT -i -H "Content-type: application/json" -d @put_msg1.json http://localhost:7001/JaxRsSample1/jaxrs/messages/uid-def002「HTTP/1.1 403 Forbidden」がレスポンスとして返されます。これで他のユーザーのメッセージを投稿することはできなくなりました。まとめ本連載では2回にわたり、JAX-RS のプログラミングやWebLogic Server12cでJAX-RSを使う際のポイントについて説明しきました。JAX-RSは今年発表されるJavaEE7でも新しいバージョンが予定されており、今後の拡張が期待できます。次回は、Java EE 6の目玉の一つであるCDI(Contexts and Dependency Injection)をとりあげます。お楽しみに。

本連載は、サンプル・アプリケーションの開発を通じてJava Platform, Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。前回はOEPEとWebLogic Server12cを使ってJAX-RSのサンプルアプリを実装しました。第2回では第1回に続き、JAX-RSのプログラミングを行っていきます。その中で、WebLogic Se...

01. 特集 - WebLogic Server

「データベースへのアクセスを止めない」──WebLogic ServerでOracle RACの障害を検知し、システム停止を防ぐOracle MAA

ビッグデータ時代とも呼ばれる昨今、社内外のさまざまなデータを活用してビジネス上の価値を引き出したり、あるいはビジネス機会を補足したりするうえで、「常にデータにアクセスできること」の重要性はますます高まっている。アプリケーション・サーバからデータベースへの接続に関しても、従来のようにデータベースを二重化するだけではもはや不十分だ。いずれかのノードが故障した際、それをアプリケーション・サーバ側で素早く検知できなければ、結局はシステム停止時間が長引いてしまう恐れがある。オラクルが提唱する企業システムの高可用性アーキテクチャ「Oracle Maximum Availability Architecture(MAA)」では、この課題の解消策としてWebLogic Serverの「Active GridLink for RAC」の活用を提案している。その概要、利点を紹介しよう。(川添貴生)ミッション・クリティカル・システムの高可用性を実現するアーキテクチャOracle MAA 企業の事業活動のさまざまな領域でITが活用されるようになったことに伴い、企業システムを構成するハードウェアの故障やソフトウェアのトラブルなどによるシステムの停止が事業活動に及ぼす影響も年々大きくなってきた。特にビッグデータ時代とも呼ばれ、社内外のデータのリアルタイムな活用が企業の競争力に大きくかかわるようになってきた今日、障害などによるシステムの停止は、企業の業績そのものを大きく左右しかねない状況となっている。 そこで重要性を増しているのが「システムの可用性」だ。ミッション・クリティカルな業務を担うシステムでは、サーバやストレージ、ネットワークの二重化などにより、単一障害点(Single Point of Failure)を解消するといった対応が図られることも珍しくなくなっている。 ただし、場当たり的な対処では、真の意味で高可用性を実現することはできない。そこで、高可用性を実現するためのベスト・プラクティスとしてオラクルが提唱しているのがOracle MAAだ。 Oracle MAAでは、ハードウェア障害やネットワーク障害、データ不整合、あるいはヒューマン・エラーなど、ミッション・クリティカル・システムの安定運用を阻害するさまざまな障害を想定し、それぞれについて適切な対策を講じることによってシステムの高可用性を確保する。 例えば、データベースのハードウェア障害については、「Oracle Real Application Clusters(RAC)」を利用してデータベースをアクティブ/アクティブで冗長化することにより、いずれかのノードに障害が発生した場合でも、残りのノードで処理を継続することを可能にする。また、ストレージ障害にも対応できるよう、Oracle Automatic Storage Management(ASM)も利用する。このようなかたちで高可用性を実現し、ダウンしない、あるいはダウンしてもすぐに復旧するシステムを実現するのがOracle MAAの狙いである。  オラクルは、このOracle MAAの一環として、WebLogic ServerとOracle Databaseの連携にも、高可用性を実現するためのテクノロジーを組み込んでいる。その具体例として挙げられるのがActive GridLink for RACだ。 アイドル時を利用した死活確認、SQLでの死活確認によるデータベース障害の検知には、いずれも課題が Oracle RACでは、Oracle Net Servicesに接続フェイルオーバーの仕組みが備わっており、RACインスタンスの1つに障害が発生すると、自動的に別のインスタンスに接続先が切り替わる。データベースにその都度接続するタイプのアプリケーションならば、この機能を使うことでインスタンス障害に対応することができる。 しかし、アプリケーション・サーバの場合、その都度コネクションを張るのではなく、起動時にあらかじめ複数のコネクションを生成してプールに格納し、それを使い回す「コネクション・プーリング」の仕組みを使うのが一般的である。これにより、データベースに接続する度にコネクションを生成し、処理が完了したら切断するといった接続/切断の繰り返しに伴うリソースの浪費を防ぐわけだが、反面つなぎっぱなしになるため、データベースの障害を検知できないという問題がある。そのため、障害を検知してコネクションを張り直すための仕組みを何らかのかたちで用意しなければならない。 具体的な実装方法としては、大別して2つの方法が考えられる。まず1つは、一定時間データベースへのアクセスがないタイミングを利用して、コネクションの死活を確認する方法。2つ目は、SQLを発行する前に、その都度コネクション確認用のSQLを発行するという方法だ。 ただし、これらはいずれも、決して確実な方法とは言えない。例えば、始終データベースにアクセスするアプリケーションの場合、1つ目の方法ではインスタンスの死活を確認するタイミングがないため、結局は障害を検知することができない。2つ目の死活確認用SQLを毎回発行する方法ならば確実に障害を検知できるが、それによるSQLがデータベースの負荷を増大させてしまうというジレンマが生じる。データベースの障害を即座に検知するActive GridLink for RAC さらに、RACを利用する際に考慮すべき問題として、それぞれのコネクションが、どのRACインスタンスに接続しているのかを把握できないことが挙げられる。 例えば、RACインスタンス1から3までの3つのインスタンスがあり、インスタンス1に障害が発生したとしよう。 このとき、コネクション・プール内のコネクション群のうち、どれがどのRACインスタンスに接続しているのかを把握していて、なおかつインスタンス1に障害が発生したことを検知できれば、該当のコネクションのみクローズし、インスタンス2やインスタンス3に接続するコネクションはそのまま生かすといった対処がとれる。 しかし、コネクションとRACインスタンスの関係を把握できない場合、その必要がないコネクションについても「クローズ→再生成」を行ってしまい、エラーの発生や処理性能の低下を招く恐れがある。 Active GridLink for RACには、これらの問題を一挙に解決する「Fast Connection Failover(FCF)」という仕組みが備わっており、これによってダウンタイムを最小限に抑えている。 まずインスタンス障害の検知については、Oracle RACに備わる「Oracle Notification Service」との連携で実現している。Oracle Notification Serviceは、インスタンス障害などを外部に通知するために用意されたOracle RACの機能であり、Active GridLink for RACはこの通知を受け取ることによって障害を検知する。これにより、データベース側の障害を発生時点で即座に検知できるとともに、コネクション確認用のSQLが不要になるため、データベースの負荷の軽減も図れるというわけだ。  また、Active GridLink for RACで生成されるコネクションは、自分が現在どのインスタンスに接続しているのかを把握している。つまり、Oracle RAC側のインスタンスに障害が発生した場合でも、そのインスタンスに接続しているコネクションだけをクローズし、稼働中の他のインスタンスに接続するコネクションを再生成できるのだ。こうした仕組みにより、インスタンス障害が発生しても素早くそれを検知し、回避できるとともに、性能劣化の抑制が可能となっているわけだ。二重化したOracle RAC環境にも対応 上述したActive GridLink for RACの機能に関しては、すでにWebLogic Serverの販売パートナーであるNECが技術検証を行っており、実際にパブリック・ネットワーク障害やインター・コネクト障害が発生した際、どの程度の時間で復旧できるのかが明らかになっている。 その結果によれば、FCFを使わなかった場合はパブリック・ネットワーク障害で9分30秒、インター・コネクト障害で5分の時間をエラー検知に要していた。これがFCFを用いた場合は、それぞれ15秒、33秒にまで短縮できたという。特にリアルタイム性が要求されるシステムにおいて、この検知時間の差は極めて大きいのではないだろうか。  なお、Oracle RAC自体の障害に対応するために、Oracle RAC環境をもう1つスタンバイ環境として用意して冗長化するというケースもあるだろう。しかし、Oracle RAC環境を二重化したとしても、それに接続するアプリケーション・サーバがOracle RACの障害を検知し、接続先をスタンバイ環境に速やかに切り替えられなければ意味がない。 そこで現在のWebLogic Serverでは、プライマリのOracle RAC環境に障害が発生して接続できなくなると、自動的にスタンバイ側のOracle RACに接続するという設定が行えるようになっている。これにより、Oracle RAC環境そのものが単一障害点になることを防げるのだ。 このように、WebLogic Serverでは、Oracle MAAの一環としてOracle RACとActive GridLink for RACを組み合わせることで、データベース環境にトラブルが発生しても迅速にリカバリして処理を継続する仕組みが実現されている。高い可用性が求められるシステムでは、ぜひこれらの機能の活用を検討していただきたい。

ビッグデータ時代とも呼ばれる昨今、社内外のさまざまなデータを活用してビジネス上の価値を引き出したり、あるいはビジネス機会を補足したりするうえで、「常にデータにアクセスできること」の重要性はますます高まっている。アプリケーション・サーバからデータベースへの接続に関しても、従来のようにデータベースを二重化するだけではもはや不十分だ。いずれかのノードが故障した際、それをアプリケーション・サーバ側で素早く検...

05. コラム - WebLogic勉強会 通信

WebLogic ServerでJAX-RS

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。3月21日に開催された「第34回WebLogic Server勉強会@東京」の後半の「WebLogic ServerでJAX-RS」(GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 賢志氏)セッションをレポートします。JAX-RSはJava EE 6に含まれるRESTful Webサービスを使用した仕様で、よりシンプルにWebサービスを活用することを目指しています。WebLogic Serverにおいては 11gバージョンでも先取りして取り入れられています。今回は蓮沼氏のセッション資料の前半を使用しながら WebLogic Server初心者向けにRESTful Webサービスの概要とJAX-RSの基本を紹介します。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JAX-RSとはJAX-RSはThe Java™ API for RESTful Web Servicesの略です。JAX-RSの仕様書「JSR-000311 JAX-RS: The JavaTM API for RESTful Web Services」で公開されています。JAX-RSはHTTPを使用したシンプルなWebサービスの仕様で、この仕様に基づくJAX-RS実装が下図のようにいくつか提供されています。JerseyはGlassFishが提供しているJAX-RSのリファレンス実装です。WebLogic ServerのJAX-RSもJerseyをベースに実装されています。また、インターネット上の様々なサービス提供会社、例えばAmazon, Yahoo, TwitterなどもRESTful Webサービスを提供しています。 RESTfulクライアントとRESTful Webサービス間の通信クライアントとRESTful Webサービスの通信手順は下記のようになっています。クライアントはURI内にリソースおよびパラメータを組み込みHTTP通信で呼び出します。RESTful Webサービス(リソースクラス)は渡されたパラメータを元に処理を実行し、その結果をXML形式の応答メッセージで返します。この時HTTP通信なのでHTTPのステータス(正常・異常など)も返ります。この図ではステータスが200なので正常に処理が実行されたことが分かります。(JAX-RSではHTTP通信を使用するのでHTTPステータスは重要) RESTの3要素とは上記のようにJAX-RSの基本はHTTP通信を使用してクライアントとWebサービス間をシンプルに通信することが目的であり、構成要素として「リソース」、「メソッド」、「URI」の3つが重要です。RESTの3要素:リソース RESTの3要素:メソッド RESTの3要素:URIリソースは@Pathアノテーション付きのクラス(POJO)、メソッドはリソースクラスのメソッドで、対応するアノテーション(@GET, @POST, @PUT, @DELETE)を付加します。URIは@Pathやパラメータを渡すための情報を付加します。 実際のRESTful Webサービスのプログラミング例これはクライアントからのリクエストを受け付け、応答を返すRESTful Webサービスのサンプルです。POJOでリソースクラスを作成します。@GETアノテーションを追加します。@Path(), @QueryParam()は下の図のようにURIに埋め込んだリソースの名前、渡すパラメータのためのアノテーションです。 まとめ以上、蓮沼氏のJAX-RSセッションの前半、基本を振り返ってみました。今回初めての方、リソース、メソッド、URIの3要素の関係が何となくイメージしていただけたかと思います。詳細は、「WebLogic ServerでJAX-RS」蓮沼氏の資料をご覧ください。なお、WebLogic ChannelではJAX-RS関連の技術情報、特にWebLogic Server 12c上で実際にJAX-RSアプリを動かす流れを説明している資料が下記にアップされていますので、併せてご活用ください。[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(6) JAX-RS 第1回

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 3月21日に開催された「第34回WebLogic Server勉強会@東京」の後半の「WebLogic ServerでJAX-RS」(GlassFishユーザー・グループ・ジャパン 副会長 蓮沼 賢志氏)セッションをレポートします。JAX-RSはJava EE...

01. 特集 - WebLogic Server

NECの業務システム構築基盤「SystemDirector Enterprise V8.0」がWebLogic Server 12cをサポート。それによるメリットは?

複雑化が進む企業システムの開発を、高い品質を保ちながら効率化すべく、長年培ったノウハウを凝集してNECが提供する業務システム構築基盤が「SystemDirector Enterprise(SDE)」だ。そのJava EE対応版であるSDE for Javaは、実行基盤となるアプリケーション・サーバの1つにWebLogic Serverを採用しているが、2013年4月にリリースされた新版「SDE V8.0」で最新のWebLogic Server 12cをサポートし、Java EE 6への対応を果たした。新版の特徴、WebLogic Server 12cをサポートしたことのメリットについて、同社ソフトウェア生産革新部 マネージャーの橋本良太氏、同主任の小泉健氏に聞いた。(編集部)業務システムの開発/保守で企業が抱える課題を解決すべく登場したシステム構築基盤 システム開発に使われるテクノロジーが日進月歩で進化し、またシステム開発の複雑化や短期化が進む中、多くの企業は現在、次のような課題に直面している。テクノロジーの発展が早く、それをキャッチアップして適宜、使いこなしていくのが大きな負担となってきたシステムを保守/運用する中で、担当者が異動/退職した、SIerが変わったなどの事情から、現状を正確に反映した設計書が存在せず、システムの全体像を把握できなくなってしまった複数のSIerにシステム構築/保守を委託してきた結果、各社が提供するさまざまなフレームワークが混在した状態となり、システムの維持/運用にかかるコストが肥大化してしまった さまざまなシステム構築/運用案件を手掛けてきたNECも、これらの課題に悩む企業の姿を度々目にしてきた。NEC ソフトウェア生産革新部 マネージャーの橋本良太氏 「そこで、NECがこれまでに培ってきた知見やノウハウを凝集し、品質の高いシステムを効率的に開発でき、変更への対応が容易で保守しやすいシステムの構築基盤を提供することで、そうしたお客様をご支援しようとの思いから生まれたのがSDEなのです」(橋本氏) SDEの特徴は、「周辺技術や基盤部分の作り込みをSDE側でカバーし、個々のプロジェクトの設計者や開発者がビジネス・ロジックなどの開発に専念できるようにすることで、高いシステム品質と開発生産性を両立させている点」(橋本氏)である。これにより、システム開発の短期化が進む中でも、引き続き品質の高い高機能なシステムを継続的に作り続けていくことが可能になる。そのための道具立てとして、SDEには次に説明する3つの要素が用意されている。 (1)開発方法論 システム構築にかかわる業務設計担当者や実装設計担当者、プラットフォーム構築担当者、標準化担当者、データベース設計者などが、それぞれどのような役割を担い、システム開発のどのフェーズで、どういった作業を行い、どのような成果物を作るのかを規定したもの。 「設計書などの成果物のサンプルも用意されており、この開発方法論に従って作業を進めれば、自ずと品質の高いシステムを効率的に作れるよう工夫を凝らしています」(橋本氏) (2)開発環境 上記の開発方法論に従ったシステム開発の工程を効率化/自動化するためのツール群。ビジネス・モデリング・ツール、Excelベースの機能設計ツール、Eclipseベースの統合開発環境(Java EEに対応したSDE for Javaの場合)、テスト・ツールなどから成る。機能設計ツールなどには、定義内容に従ってプログラムを自動生成するジェネレータ機能が備わる。 「これらのツールを使用し、上流工程ではビジネス・モ���リング・ツールや機能設計ツールなどで業務フロー定義や機能設計、画面設計などを実施。それらの設計情報を基に、下位工程では統合開発環境やテスト・ツールを使用してコーディング/テストの作業を行うといった流れで開発を進めます。設計情報に基づいてジェネレータでコードを自動生成するなど、ツールによる自動化/効率化の仕組みを最大限に取り入れています」(橋本氏) (3)サポート・サービス 個別のプロジェクトへの上記開発方法論や開発環境の適用、およびプロジェクトの運用を支援するサポート・サービス。  これらの構成要素から成るSDEは、Java EEに対応したSDE for Javaに加えて、.NETに対応した「SDE for .NET」、両者を組み合わせた「SDE Suite Pack」という3つの製品を提供してきた。そのSDEのメジャーバージョンアップとなるSDE V8.0では、4つ目の製品としてスマート・デバイス向けアプリケーションの開発を支援する「SDE for Smart Device」が追加された。 さらに、WebLogic Channel読者にとって見逃せないポイントは、SDE for JavaがWebLogic Server 12cをサポートしたことだ。これにより、どのようなメリットが得られるのかを以下に見ていこう。WebLogic Server 12cのサポートで、標準フレームワークによる開発が可能に SDE for Java V8.0の目玉は、上述したように最新プラットフォームへの対応の一環として、Java SE <7、Java EE 6に準拠したWebLogic Server 12cをサポートしたこと、ジェネレータを中心とする開発環境の基盤がEclipse 4.2になったことなどだ。 SDE for Java でWebLogic Server 12cをサポートしたことのメリットを、小泉氏は次のように説明する。NECソフトウェア生産革新部 主任の小泉健氏 「これまでも、SDE for JavaではNECが独自にオープンソースのフレームワークなどを組み合わせて用意した環境を使ってJSFアプリケーションなどを開発することが可能でしたが、新版では、WebLogic Server 12cをサポートしたことにより、アプリケーション・サーバ側に用意された標準フレームワークを利用して、JSF2やJPA2を使ったアプリケーションを開発することが可能になりました これにより、お客様にとっては、Java EE 6という最新の業界標準フレームワーク上で、安定してシステムの開発/保守が行えるようになるというメリットがあります」 WebLogic Server 12cのサポートは、NECのようなシステム基盤の提供側にも恩恵をもたらす。 「従来は私たちがオープンソースなどを組み合わせて行っていたフレームワークの整備をWebLogic Serverに任せられるようになるため、SDE自体を開発/保守する際の負担が大きく減ります。各オープンソース・フレームワークが同じライブラリの異なるバージョンを使っているために生じる互換性の問題や、ライブラリ間の依存関係の解決、個々のオープンソース・フレームワークのバージョンアップへの追随といった問題に悩まされることがなくなるからです。それに、標準フレームワークであれば、開発者の調達や教育も容易になります」(小泉氏)  なお、NECは昨今ニーズが高まるSaaSアプリケーションの実行基盤としてもSDE for Javaの機能強化を図ってきた。そこで肝となるマルチテナント対応においても、Java EE 6のサポートが大きなメリットをもたらす。 具体的には、これまでテナントごとに内容が異なる画面やメッセージを表示するためにNECが独自に用意したJSF環境を利用していたが、SDE for Java V8.0から、その表示切り替えをJSF2によってシングル・インスタンスで行えるようになった。これにより、リソースの使用効率が大幅に向上する。この仕組みは、NECが提供するSaaSアプリケーションなどでも活用されているという。 また、SDE for Javaには、NEC独自のフレームワークを一切使わず、標準のJava EEテクノロジーだけでシステムを構築できる「Express Edition」も用意されている。同エディションは、ソース・コード納品が求められる案件や、ベンダー固有技術の使用を厳格に禁じた案件での利用を想定したものだ。SDE V8.0がJava EE 6に対応したことにより、このExpress Editionを使った開発でもシステムごとに作り込む部分が大幅に減り、開発効率が高まっている。  加えて、新たに追加されたSDE for Smart Deviceによるスマートフォンやタブレット、スレートPC向けのアプリケーション開発(OSはAndroid、iOS、Windowsをサポート)でも、今後はSDE for JavaのJava EE 6対応が効果を発揮すると見られる。 SDE for Smart Deviceでは、Ajaxアプリケーションなどにおけるクライアント/サーバ間の通信にJSONを利用する。現状、Java EEで構築されたシステムについては、プレゼンテーション層の制御にStrutsやJSFを使用しているが、小泉氏は「今後はJava EE 6で追加されたJAX-RSをクライアント/サーバ間の通信に利用していきたい」と展望を語る。 このように、NECはJava EE 6など最新の標準テクノロジーの利点を生かしながら、SDEの拡張を精力的に進めている。 「WebLogic Server 12cのサポートによって得た余力は、私たちが本来、注力したい開発方法論の拡充やジェネレータの整備、新たに追加したSDE for Smart Deviceの機能拡充などに振り向けることで、お客様に対して、より付加価値の高いシステム基盤を提供していけると期待しています」(小泉氏) WebLogic Chanelでは、Java EEテクノロジーの発展に伴って進化し続けるSDEの動向に、今後も注目していきたい。

複雑化が進む企業システムの開発を、高い品質を保ちながら効率化すべく、長年培ったノウハウを凝集してNECが提供する業務システム構築基盤が「SystemDirector Enterprise(SDE)」だ。そのJava EE対応版であるSDE for Javaは、実行基盤となるアプリケーション・サーバの1つにWebLogic Serverを採用しているが、2013年4月にリリースされた新版「SDE...

05. コラム - WebLogic勉強会 通信

JPA 2.0入門

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。3月21日に開催された「第34回WebLogic Server勉強会@東京」の前半の「JPA2.0入門」(日本オラクル株式会社 Fusion Middleware事業統括本部 松林晶)セッションをレポートします。JPA(Java Persistence API)はJavaのアプリケーションのデータベースアクセスをシンプルに、効率良く実装するためのO/Rマッピングの標準仕様です。JPA2.0は1.0からさらに詳細な機能強化がされています。ここでは、当日の資料を使いながら初心者向けにJPA2.0の概要を紹介します。(日本オラクル Fusion Middleware事業統括本部 佐々木 政和)JPAとはJPAはJava Persistence APIの略です。永続化およびオブジェクトとリレーショナルのマッピング管理用のJava APIの仕様です。Java EE環境に限らず、Java SEでも利用可能です。JPA 2.0の仕様書は2009年12月10日付けの「JSR-000317 JavaTM Persistence 2.0 (Final Release)」で公開されています。これまでJavaのアプリケーションでデータベースをアクセスする場合はJDBCを使用してSQLでアクセスする必要がありました。その場合、SQLを意識したプログラミングが含まれることになります。JPAの技術的な目的は、Javaアプリケーション開発者に対してJavaドメインモデルを使用してリレーショナルデータベースを管理するためのオブジェクト/リレーショナルマッピング機能を提供することです。JPAは下図のようにJavaのアプリケーションとデータベースの間に存在するO/Rマッパーの役割を担います。具体的には、データベースのテーブルのレコードとJavaのオブジェクト間の相互変換を行います。それにより、アプリケーション開発者がJavaのオブジェクトにアクセスすると、その結果データベースへの操作が行われます。 JPA vs. JDBCJPAを使用したアプリケーションのプログラミングがどうなるか、JDBCアプリケーションと比較してみると一目瞭然です。このことから、JPAを使用したメリットとしてアプリケーションの開発生産性が高まることが分かります。単純にコーディング量が少なくなることで開発工数を削減できるだけでなく、JPAフレームワークを活用することで開発プロジェクトチーム全体でのプログラミングの統一性が保たれ保守性に優れたアプリケーション開発が実現できます。 JPAの構成要素JPAは、下記の要素から構成されます。 エンティティ(Entity)の役割エンティティクラスはJPAの中心になるクラスです。リレーショナルデータベースのテーブルをオブジェクトモデルとして表したもので、下記の図のようにPOJOで実装します。オブジェクトとデータベースの関係をマッピングするための情報をJPAフレームワーク(JPAプロバイダー=WebLogic Server)に対して与える必要があるので、POJOにアノテーションを付加する方法を使用します。この例ではCustomerクラスとCUSTOMERテーブルの関連付けを行うために@Entity, @Idというアノテーションを付加しています。 エンティティのライフサイクルまず、エンティティのライフサイクルを理解することが重要です。下図の中央部分の永続コンテキスト(Persisitence Context)に管理されている状態を「管理状態」といい、それ以外は「デタッチ状態」といいます。つまり、「管理状態」はJPAプロバイダーがデータベースとの関連を適切に処理する状態であり、「管理状態」のエンティティオブジェクトに加えた変更はJPAフレームワークを通じてデータベースに反映されます。 エンティティのライフサイクルのサンプルこの例では、初めにnew myEntityでmyEntityインスタンスを作成しています。この時点では、「管理状態」ではなく単にHeap上にオブジェクトを生成しただけにすぎません。データベースと連携するために、persistメソッドを呼び出しています。このpersistメソッドを呼び出すことで新しく作成したオブジェクトは「管理状態」に置かれます。結果的にJPAプロバイダー(Weblogic Server)はデータベースにレコードが無ければ作成します。このように管理状態に置かれると、データベースへの挿入、追加、削除が可能になります。tx.commit()でトランザクションがコミットされた後は「デタッチ状態」になります。 「デタッチ状態」のEntityに変更を加えた場合、この例ではcustomerはJava Heap上に存在しますがJPAの「管理状態」から外れているために実際のデータベースには反映されません。「デタッチ状態」でcustomerに対する操作を行った場合はmerge()で同期することができます。 コンテナ管理とアプリケーション管理のエンティティマネージャコンテナ管理のエンティティマネージャとアプリケーション管理のエンティティマネージャの2種類があります。コンテナ管理のエンティティマネージャでは、永続コンテキストのライフサイクルはアプリケーションに透過的でJTAトランザクション制御を含み自動的に管理されます。永続コンテキストのライフサイクルは@PersistenceContextアノテーションまたはpersistence-context-refデプロイメントデスクリプタを使用して宣言されます。デフォルトはtransaction-scoped persistenceです。アプリケーションは、インジェクトするか、またはJNDIネームスペース上で直接Lookupしてコンテナ管理のエンティティマネージャを取得します。アプリケーション管理のエンティティマネージャが使用されているときは、アプリケーションはエンティティマネージャライフサイクルを管理するため、永続コンテキストを取得したり破壊したりするために直接EntityManagerFactoryと会話します。 データ操作および管理用のAPI JPQL(Java Persistence Query Language)とは 4種類のクエリ方法 まとめ当日の勉強会では、後半JPA 2.1のトピックスの紹介がありました。Java EE 7に含まれるJPA 2.1ではJPQL/Criteria APIの強化としてストアドプロシージャサポート、バルク更新、ON句サポートなどが予定されています。ぜひ、「JPA2.0入門」の資料をご覧ください。なお、WebLogic ChannelではJPA関連の技術情報、特にWebLogic Server 12c上で実際にJPAアプリを動かす流れを説明している資料が下記にアップされていますので、併せてご活用ください。[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(4) JPA 第1回[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(4) JPA 第2回

WebLogic Serverファンの皆様、こんにちは、WebLogic Server勉強会通信です。 3月21日に開催された「第34回WebLogic Server勉強会@東京」の前半の「JPA2.0入門」(日本オラクル株式会社 Fusion Middleware事業統括本部 松林晶)セッションをレポートします。JPA(Java...

04. 実践! Java EE 6

[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(6) JAX-RS 第1回

本連載は、サンプル・アプリケーションの開発を通じてJava Platform, Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。今回から2回にわたって、Java API for RESTful Webサービス (JAX-RS)をとりあげます。Restful Webサービスは従来のWebサービスよりも軽量でスケラーブルであり、大量アクセスのWebサービスに向きます。また、クライアント側の使用する機能が基本的にHTTPだけでよいことから、様々なデバイスからのアクセスが可能です。その他、管理系ツールの操作インターフェースとしても応用されています。JAX-RSはこういったRestful WebサービスのJavaでの標準APIをJavaEE環境で実現したものです。今回はJAX-RSによるRestful WebサービスのサンプルアプリケーションをWebLogic12cとOEPEを使って開発してきます。(日本オラクル Fusion Middleware事業統括本部 関屋信彦)Restful WebサービスについてRestful Webサービスの特徴やアーキテクチャについては既に多くの公開情報があるため、詳細は省きます。ここでは今回のアプリケーションを開発するにあたって関連するRestful Webサービスのポイントを押さえておきます。クライアントとサーバーのやりとりは、HTTPのGET/POST/PUT/DELETE/HEADのメソッドを使います。従来のWebサービスやWebサイトでは主にGETとPOSTのみでした。RESTful WebサービスはURIを意識しアーキテクチャです。URIのパスが処理対象(リソースと呼びます)を表します。そして、そのリソースに対しての操作は各HTTPメソッドを使い分けて行います。RESTful Webサービスは基本的にステートレスです。つまりHTTPセッションを利用しません。これでより多くのリクエストを処理でき、また拡張性を高めることができます。JAX-RSについてJavaEE 6におけるJAX-RSのバージョンは1.1です。JAX-RSを使うことで、Javaの標準的なAPIとしてRestful Webサービスのシステムを開発することができるようになります。このAPIの特徴をいくつか挙げます。POJOのJavaクラスにURIパスを定義するアノテーションをつけてWebサービスのリソースとJavaクラスやメソッドのマッピングを行います。HTTPメソッドに対応したアノテーション(@GET/@POST/@PUT/@DELETEなど)が用意されています。これで簡単にJavaのメソッドをRestful Webサービスとして公開できます。メディアタイプ(表現形式)もアノテーションで制御します。メディアタイプによってHTTPリクエスト・レスポンスのボディにHTMLを使うか、XMLを使うかなど変えることができます。WebLogic Server 12cのJAX-RSWebLogic Server 12cではJAX-RSの実装としてJerseyのバージョン1.9を利用しています。JerseyはJAX-RS 1.1のリファレンス実装であり、実績のあるオープンソースです。よって、WebLogic Server上でJAX-RS開発を始めたい場合、Jerseyのドキュメントが参考となります。また、WebLogicのドキュメントの「RESTful Webサービスの開発」も適度な分量で書かれているので、これから初めてJAX-RSを開発する方はこちらの方が読みやすいかもしれません。また、JAX-RSのサンプルアプリケーションを探している場合は、Jerseyが提供するサンプルを一度ダウンロードしてみるといいでしょう。WebLogic Server12cの中に含まれているJerseyのバージョンはアップグレードが可能です。詳しくは「RESTful Webサービスの開発」を参照してください。このブログの内容JAX-RSの第1回では、JAX-RSアプリケーションを開発しながらJAX-RS開発のポイントについて学び、最後にWebLogic Server12cにデプロイして実際に動きを確認します。簡単なメッセージ投稿サイトを題材にしたアプリケーションを作成します。ユーザーはHTTPのPUTでメッセージを投稿できます。ユーザーはHTTPのGETで自分や他の人のメッセージを取得できます。アプリケーションをWebLogic Server12cにデプロイします。curlを使ってJAX-RSアプリケーションの動きを確認します。アプリケーション開発の準備本連載では、Oracle Enterprise Pack for Eclipse(OEPE)を使用してサンプル・アプリケーションの開発を進めます。OEPEやWebLogic Server 12cのインストールおよび設定が終わっていない方は、記事「[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(1) 概要」を参考にしてください。図1: 「New Dynamic Web Project」ウィンドウ1(クリックして拡大)OEPE起動後にまず今回のアプリケーション用のEclipseのプロジェクトを作成します。「New」->「Dynamic Web Project」を選択します。「New Dynamic Web Project」ウィンドウが表示されたら、「Project Name」としてここでは「JaxRsSample1」を入力し、「Next」ボタンをクリックします。その次の画面ではそのまま「Next」を押してください。図2: 「New Dynamic Web Project」ウィンドウ2(クリックして拡大)次に表示される画面では「Generate web.xml deployment descriptor」にチェックを入れて最後にFinishでプロジェクトの作成を完了してください。図3: 「Properties - Project Facets」ウィンドウ(クリックして拡大)プロジェクトが作成されたら、次にEclipse上でJAX-RSのAPIを参照できるように、参照ライブラリをプロジェクトに追加します。EclipseのProject Explorerにてプロジェクト名JaxRsSample1を選択し、右クリックから「Properties」を選択してください。表示されたダイアログの左側のペインで「Project Facets」を選択します。Project Facets画面では「JAX-RS (REST Web Services)にチェックを入れます。そして、「Futther configuration required…」のところをクリックします。図4: Project FacetsからのJAX-RSライブラリの追加(クリックして拡大)ここではJAX-RSの実装ライブラリを指定します。ライブラリ追加のボタンをクリックします。図5: ライブラリ名の入力(クリックして拡大)「New」ボタンを押します。「User library name」にはここではJAX-RSと入力します。OKを押します。図6: JAR追加ボタン(クリックして拡大)「Add JARS…」をクリックします。ファイルの選択ダイアログになるので、<ミドルウェアホーム(D:\wls12c)>\modules\com.sun.jersey.core_1.1.0.0_1-9.jarを選択して追加します。jarが追加されたことを確認し、「OK」をクリックします。図7: JAX-RSライブラリ反映後のProject Facets画面(クリックして拡大)戻った画面では忘れずにJAX-RSライブラリの横のチェックボックスにチェックを入れます。その後は、JAX-RSのサーブレットとURLマッピングの 情報を確認してください。この内容がweb.xmlに反映されます。ここではデフォルトのままにして、「OK」をクリックしてください。「Projects Facets」画面に戻りますので、そこでも「OK」をクリックしてファセットの反映を確定させてください。プロジェクトの作成とプロジェクト・ファセットの追加が終わった段階で、以下のファイルが自動的に作成されています。これの他にもファイルやライブラリはありますが、ここでは説明を割愛します。Java Resource -> Libraries -> JAX-RS さきほどファセットから追加したJAX-RSのライブラリです。これで今回のEclipseでの開発で、JAX-RSのAPIを参照できるようになりました。WebContent/WEB-INF/web.xml さきほどのJAX-RS関連のサーブレット定義が追加されています。WebContent/WEB-INF/weblogic.xml WebLogic Server固有のデプロイメント・ディスクリプタです。特にJAX-RS関連の設定はここにはありませんがWebLogicサーバーにデプロイするときに必要なファイルです。アプリケーションの作成 web.xmlこれからJAX-RSのアプリケーションを作っていくための手順を説明します。まずはHTTPリクエストを受けつけるところの部分です。これまでの手順によって、web.xmlのサーブレット定義部分は以下の状態になっています。web.xml(抜粋)  <servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping>JerseyのサーブレットがURLパス/jaxrsでリクエストを受け付けています。このURLパスは変更可能ですが、今回はこのままにしておきます。アプリケーションの作成 Restful Webサービス設計次に、Restful Webサービスとしての設計です。リソースとそのリソースが公開するHTTPメソッドを決めます。各リソースはURIで表現され、その実体はJAX-RSの場合、JavaのクラスまたはJavaメソッドになります。今回は簡単なメッセージ投稿Webサービスを題材にして設計します。URIパス(リソース)HTTPメソッド説明/messagesGETWebサービス内の全メッセージを表すリソースです。GETにより一覧を取得できます。/messages/uid-{userid}例: /messages/uid-sekiya123GET/PUT指定されたユーザーIDの全てのメッセージを表すリソースです。PUTによりそのユーザーのメッセージを投稿できます。/messages/uid-{userid}/seq-{us