NWDI(NetWeaver Development Infrastructure) は、 NetWeaverプラットフォームの上に動作するJavaベースのアプリケーションを開発するための基盤であり、アプリケーションのバージョン、構築、およびライフサイクルを管理する機能を備えています。
NWDI自体もNetWeaver Javaプラットフォームに稼働するものですので、NetWeaverインストール時に利用タイプDIを選択してインストールを行うことで、 NWDIに必要な機能がインストールされます。
コンセプト
NWDIは、システムの開発作業を一つのプラットフォームに統合することにより、集中管理が可能になります。
NWDIでは以下の作業がすべて集中管理できるようになっております。
- ソースプログラムの集中管理化⇒DTR
- 構築配置作業の集中管理化⇒CBS
- 変更管理移送作業の集中管理化⇒CMS
実現
アーキテクチャ
(source: sap help portal)
機能構成
上記のアーキテクチャ図で示したとおり、NWDIを構成する要素は、NWDS、DTR、CBS、CMSがあります。
- NWDS
NWDSにおけるJavaアプリケーションの開発は、ソフトウェアコンポーネントモデルを基準としております。従ってソフトウェアプロジェクトが、開始時から管理しやすい再利用可能な単位に体系的に構造化されます。 - DTR
DTRでは、バージョンニングソースコードを管理できるため、チームにおけるソフトウェアの分散開発、及びソースの移送と複製が可能です。 - CBS
CBSは、ソースコードのセントラルビルドに使用されます。開発者の操作はNWDSに統合されます。CBSはビルドプロセスのために自動的にDTSと通信います。 - CMS
CMSは、JAVA開発ランドスケープ、及びソフトウェアライフサイクル全体に渡る移送を集中管理するため、に使用します。CMSの機能は、DTR、CBS及びSLDに緊密に統合されています。
ロール
NWDIは開発者と管理者のためにそれぞれロールを用意しています。
- 管理者ロール
NWDI.Administrator - 開発者ロール
NWDI.Developer
概要
SLD(System Landscape Directory,システムランドスケープディレクトリ) は、システム間連携を行うシステムの情報を一元管理するためのもので、システムの技術情報(サーバ名など)やソフトウェアカタログ情報(利用ソフトウェア製品、リリースなど)を保持しています。
SLD はシステムランドスケープにインストールされているすべてのシステムコンポーネントの集中情報プロバイダとして機能します。
SLDサーバはすべての SAP Web Application Server Java のインストールにおいてインストールされますが、機能させる場合には明示的に有効化される必要があります。
実現
形態
SLD は、HTTPでアクセスできるサーバアプリケーションであり、AsJava上で動作します。
連携
SLDに登録されているシステムは、デフォルトで12時間毎に自システムの情報をSLDに送信するようにしています。
機能
以下の機能をもっております。
- サーバ情報管理
- ソフトウェア情報管理
- 名前予約管理
ツール
SLDの管理機能をアクセスするには、以下の方法があります。
- 管理インタフェース:
URL: http://host:port/sld
製品とソフトウェアコンポーネント
システムとサーバ
このトピックでは、標準技術としてのWebサービスの基礎知識を取り上げて説明します。
Webサービスとは
Webサービスには広義と狭義の二つがあります。
広義の「Webサービス」は、WEB通信を利用した、プログラミングでアクセス可能なサービスのすべてが含められます。
一方、狭義の「Webサービス」は、SOAP(Simple Object Access Protocol)やWSDL(Web Services Description Language)ベースのWebサービスに限定されます。SOAP/WSDLサービスと呼ぶことができます。
Webサービスという名前も、このSOAP/WSDLサービスから初めて使われたものと考えられます。
WEBサービス(広義)を実現する基礎技術としては、古典的な技術を代表するこのSOAPとWSDLのほかに,昨今急速に普及してきたREST(Representational State Transfer)があります。RESTベースのWEBサービスはRESTfulサービスと呼ばれております。
http://www.ibm.com/developerworks/jp/webservices/library/ws-restful/
高機能で複雑のSOAP/WSDLサービスと比べると、RESTfulサービスはシンプルで簡単に利用可能であるため、現在、後者のほうがWeb全体で広く受け入れられるようになっています。
とはいえ、歴史のこともあるため、とくに企業向けの大規模なシステムは、まだまだSOAP/WSDLサービス技術で構築されているほうが多いと考えられます。
このトピックやカテゴリは、狭義の「Webサービス」のみを対象としているため、特別な説明がない限り、文書に記述されている「Webサービス」という用語はすべて狭義の「Webサービス」を指しております。
Webサービスの特徴
Webサービスは、主に以下のような特徴があります。
- プラットフォーム独立
HTTP、SMTP、XML等の標準仕様を積極的に活用しているため、Webサービスの実装は特定のプラットフォームや言語に依存しません。
異なるプラットフォームで実装されているWebサービスは標準仕様に従って簡単に相互接続ができます。 - 実行時に動的に連携
WEBサービスは実行時に動的に連結されます。よってサービス指向アーキテクチャ(SOA)に従えば柔軟性、敏捷性(agile)とも優れる疎結合分散アプリケーション環境が簡易に実現できます。
WEBサービス連携の流れ
WEBサービス連携の流れは以次の三つの部分からなります。
- 登録
サービスを提供する側は、サービスの接続情報をどこかに登録しておきます。 - 接続情報の検索
サービスを使用する側は、サービスを利用するための接続情報をどこかで検索します。開発時と実行時の二つの場面があります。 - 接続
サービスを使用する側は、サービス接続情報を利用して、サービスを提供する側に接続して、サービスを利用します。
WEBサービスの関連仕様
WEBサービスの関連仕様は以下のものがあります。
- SOAP
メッセージフォーマットに関する仕様 - WSDL
サービス界面仕様の記述フォーマットに関する仕様 - UDDI
サービス連携をサポートするディレクトリに関する仕様および実装 - WSIL
UDDI の代替であり、また UDDI に対する補足でもあるサービス・ディスカバリー機構
SOAP
SOAP(Simple Object Access Protocol)とは、非集中、分散環境における情報交換のための軽量のプロトコルです。SOAPのメッセージはXMLを用いて符号化します。
SOAPは次の3つの部分から成ります。
- SOAPエンベロープ構成要素
何がメッセージの中にあるのか、誰がそれを処理すべきなのか、それは選択可能か必須かどちらなのかといったことを表現するための全体の枠組みを定義しています。 - SOAP符号化(encoding)規則
アプリケーションが定義したデータ型のインスタンスをやりとりするための直列化(serialization)のメカニズムを定義しています。 - SOAP RPC表現
RPCとそのレスポンスを表現するための規約を定義しています。
WSDL
WSDL(Web Services Description Language)とは、Webサービスを記述するための、XMLをベースとした言語仕様です
WSDLサービス定義仕様で用いられる概念は以下のものがあります。
- サービス(service)
- ポート(port)
- バインディング(binding)
- ポートタイプ(portType)
- 操作(operation)
- メッセージ(mssage)
- タイプ(types)
UDDI
UDDI(Universal Description, Discovery and Integration)とは、Webサービス用の検索システムのことです。
Webサービス公開者はUDDIレジストリにWebサービスの情報(どういうサービスか、どこにあるのか、誰のものか、など)を登録し、Webサービス利用者はUDDIレジストリに対して検索をし目的に合致したWebサービスを探し出すという仕組みです。
インターネット上で一般に公開するパブリックUDDIと、企業のイントラネット内などの閉じたネットワーク上で使用するプライベートUDDIに分類されます。
WSIL
WSIL(Web Service Inspection Language)とは、大掛かりなUDDI検索と手軽なWSDL交換の中間で、簡便で使いやすく、かつ、拡張可能なネットワーク上でのサービス検索の手段を提供するものです。
WSILは、直接、Webサービスを記述するのではなく、Webサービスを記述したWSDLへの参照や、Webサービスを登録したUDDIへの参照を記述したXMLドキュメントです。いわば、WSDLやUDDIを経由すれば、利用可能なWebサービスの一覧表を提供しようという試みです。
このトピックでは、JavaEEの概要を取り上げて説明します。
JavaEEとは
Java EEとは、Java言語の機能セットの一つで、サーバや企業の情報システム、大規模システムなど向けの機能をまとめたもの。J2EEはバージョン5.0までの旧称で、以降はJava EEと呼ばれる。
- JavaSE
- JavaME
- JavaEE
Java EEにはJava SEの機能がすべて含まれるほか、サーバなどで利用されるEJB(Enterprise JavaBeans)やサーブレット(Java Servlet)、JSP(Java Server Pages)、JSF(Java Server Faces)、JNDI(Java Naming and Directory Interface)、JTA(Java Transaction API)など数多くの機能が規定されている。
JavaEEの歴史
JavaEEが初めて登場したのは1999年のことです。当時は「Java 2 Platform, Enterprise Edition(J2EE)」と呼ばれており、最初のバージョンは1.2でした。
JavaEEの最新バージョンは、2013年6月にリリースされたJava EE 7です。また現在、世界中の企業システムで広く利用されているのは、2009年12月にリリースされたJavaEE6です。
主な製品
JavaEE仕様を準拠したサーバ製品はおもに以下のようなものがあります。
No. | 製品 | 最新バージョン(2015) | ベンダー |
---|---|---|---|
1 | Tomcat | - | オープンソース |
2 | Jetty | - | オープンソース |
3 | Weblogic | - | Oracle |
4 | JBoss | - | オープンソース |
5 | Websphere | - | IBM |
JavaEEアプリケーション
JavaEEアプリケーションは,複数の,EJB-JAR,Webアプリケーション,ライブラリJARと,一つのDD(application.xml)で構成されます。
JavaEEサーバで実行できるJavaEEアプリケーションは,アーカイブ形式のJavaEEアプリケーション,および展開ディレクトリ形式のJavaEEアプリケーションです。
- EJB-JAR
EJB-JARは,EJB-JARファイル形式でパッケージ化されています。複数のEnterprise Beanと一つのDD(ejb-jar.xml)で構成されます。なお,Enterprise Beanでアノテーションを使用している場合は,DD(ejb-jar.xml)は不要です。 - Webアプリケーション
Webアプリケーションは,WARファイル形式でパッケージ化されています。複数のサーブレット,JSP,HTMLと一つのDD(web.xml)で構成されます。 - ライブラリJAR
ライブラリJARは,JARファイル形式でパッケージ化されたものです。複数の共通ライブラリから構成されています。共通ライブラリはJ2EEアプリケーション中のJ2EEコンポーネントが共通で使用できるライブラリです。JavaEEアプリケーションのDD(application.xml)の<module>タグ以下に定義されているファイル以外で,拡張子が小文字(.jar)のJARファイルがライブラリJARとみなされます。
JavaEE6
下記のリンクをご参考ください。
JavaEE5
JavaEE5は以下の仕様から構成されます。
- Web Services Technologies
- Implementing Enterprise Web Services (JSR 109)
- Java API for XML-Based Web Services (JAX-WS) 2.0 (JSR 224)
- Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)
- Java Architecture for XML Binding (JAXB) 2.0 (JSR 222)
- SOAP with Attachments API for Java (SAAJ) (JSR 67)
- Streaming API for XML (JSR 173)
- Web Service Metadata for the Java Platform (JSR 181)
- Web Application Technologies
- Java Servlet 2.5 (JSR 154)
- JavaServer Faces 1.2 (JSR 252)
- JavaServer Pages 2.1 (JSR 245)
- JavaServer Pages Standard Tag Library (JSR 52)
- Enterprise Application Technologies
- Enterprise JavaBeans 3.0 (JSR 220)
- J2EE Connector Architecture 1.5 (JSR 112)
- Common Annotations for the Java Platform (JSR 250)
- Java Message Service API (JSR 914)
- Java Persistence API (JSR 220)
- Java Transaction API (JTA) (JSR 907)
- JavaBeans Activation Framework (JAF) 1.1 (JSR 925)
- JavaMail (JSR 919)
- Management and Security Technologies
- J2EE Application Deployment (JSR 88)
- J2EE Management (JSR 77)
- Java Authorization Contract for Containers (JSR 115)
J2EE 1.4
J2EE 1.4は以下の仕様から構成されます。
- J2EE Connector Specification 1.5
- J2EE Deployment API Specification 1.1
- J2EE Management Specification 1.0
- Enterprise JavaBeans Specification 2.1
- Enterprise JavaBeans to CORBA Mapping 1.1
- Java API for XML Processing Specification 1.2
- Java API for XML Registries Specification 1.0
- Java API for XML-based RPC Specification 1.1
- Java Authorization Contract for Containers 1.0
- Java IDL API
- Java Naming and Directory Interface Specification 1.2.1
- Java Message Service Specification 1.1
- Java Servlet Specification 2.4
- Java Transaction API Specification 1.0.1B
- Java Transaction Service Specification 1.0
- JDBC Specifications, 3.0, 2.1, and Optional Package API (2.0)
- JavaBeans Activation Framework Specification 1.0.2
- JavaMail API Specification 1.3
- JavaServer Pages Specification 2.0
- RMI over IIOP
- SOAP with Attachments API for Java Specification 1.2
J2EE 1.3
J2EE 1.3は以下の仕様から構成されます。
- JDBC Extension 2.0
- Java Naming and Directory Interface Specification (JNDI) 1.2
- Java API for XML Processing (JAXP) 1.1
- Java Servlet 2.3
- JavaServer Pages (JSP) 1.2
- JavaServer Pages Standard Tag Library (JSTL) 1.0
- Enterprise JavaBeans (EJB) 2.0
- J2EE Connector Architecture 1.0
- Java Message Service API (JMS) 1.0
- Java Transaction API (JTA) 1.0
- JavaMail API 1.2
- JavaBeans Activation Framework (JAF) 1.0
- Java Authentication and Authorization Service (JAAS) 1.0
このトピックでは、JavaVMのメモリ管理の仕組を取り上げて説明します。
メモリ領域の構成
JavaVMのメモリ構成はかきにようになります。
- OS固有領域
- Cヒープ領域
JavaVM自身が使用する領域です。JNIで呼び出されたネイティブライブラリでも使用されます。 - スタック領域
Javaスレッド毎に保持するスタックの領域です。
- JavaVM固有領域
- Permanent領域
ロードされたclassなどの情報が格納される領域です。 - Javaヒープ
JavaVM上で起動するJavaプログラムのリソースを管理する領域。New領域- New領域
新規オブジェクトと閾値(-XX:MaxTenuringThreshold)未満のオブジェクトが配置されます、Young領域とも呼ばれるます。- Eden領域
新規のオブジェクトが配置されます。 - From領域
CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。 - To領域
CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。
- Old領域
New領域で閾値(-XX:MaxTenuringThreshold)を超えたオブジェクトが配置されます、Tenured領域とも呼ばれるます。
GC
種類
Javaでは、「Scavenge GC」と「Full GC」という2種類のガベージ・コレクションが実行されます。Scavenge GCはNEW領域のみを対象とした短時間で終了するガベージ・コレクションであり、頻繁に実施されます。一方、Full GCはNEWとOLD両方の領域を対象とした大がかりなガベージ・コレクションであり、比較的低い頻度で実施されます。
タイミング
以下のタイミングでGCが実施されます。
- ヒープメモリ中に新規オブジェクトを作成するために必要な空き領域が足りなくなったとき
- プログラム中でSystem.gc()が実行されたとき
- JavaVMで実行する処理がなくなってアイドル状態になったとき
下記オプションで定期的なGCを設定することができます。
- -Dsun.rmi.dgc.server.gcInterval
JDK6デフォルト3600000(1時間)) - -Dsun.rmi.dgc.client.gcInterval
JDK6デフォルト3600000(1時間))
OutOfMemoryError
メモリを割り当てる必要があるが、割り当てられるメモリが存在しないとき、OutOfMemoryErrorが発生します
例として、OutOfMemoryErrorが発生するケースを取り上げます。
- New領域が溢れた場合
- Old領域が溢れた場合
- 参照されつづけるオブジェクトが大量に存在する場合に溢れる。
- Cヒープが溢れた場合
Javaのスレッドが大量に作成された場合に溢れます、Cヒープが溢れてOutOfMemorryErrorが発生した場合、スタックトレースの先頭が「Native Method」です。
スレッド数はOSのパラメタで設定されており、それが大きな値で設定されている場合に発生します。
ソフトウェアの品質特性は大きく6つに分類され、それぞれの英語の頭文字をとってFRUEMP特性とも呼ばれています。
機能性
機能性とは、必要な機能を満たしているかということです