概要
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特性とも呼ばれています。
機能性
機能性とは、必要な機能を満たしているかということです
信頼性
使用性
効率性
保守性
移植性
このトピックでは、Pegaでの文字列処理の方法を取り上げて説明します。
型
文字列型(Pega type: Text)は、Pega内部でJavaのString型を使用し表現されます。
チェック処理
Pega標準で用意された関数を一部抜粋します。
- @isDouble(inputString)
文字列が有効な倍精度数を表しているかどうかをチェックします。 - @isInteger(inputString)
文字列が有効な整数を表しているかどうかをチェックします。 - @isLiteral(inputString)
入力がリテラルかプロパティ参照かをチェックします。
検索処理
Pega標準で用意された関数を一部抜粋します。
- @indexOf(strStringToSearch,strStringToSearchFor)
strStringToSearchForにstrStringToSearchが最初に現れたインデックスを返します。値が見つからない場合は -1 を返します。 - @substring(stringToUse,startIndex,endIndex)
文字列のインデックスは0から数えられます。
変換処理
Pega標準で用意された関数を一部抜粋します。
- @toDate(inputString)
文字列を日付型に変換します。 - @toDateTime(inputString)
文字列を日時型に変換します。 - @toDecimal(inputString)
文字列を数値型に変換します。 - @toInt(inputString)
文字列を整数型に変換します。 - @toLowerCase(inputString)
文字列をすべt小文字に変換します。 - @toUpperCase(inputString)
文字列をすべて大文字に変換します。
編集処理
Pega標準で用意された関数を一部抜粋します。
- @replaceAll(aBaseString,aOriginalChars,aNewChars)
文字列aBaseStringのサブ文字列aOriginalCharsをaNewCharsに置き換えて返します。 - @trim(str)
strの頭と後ろのスペースを削除して返します。
補足
テキスト関連のPega標準関数はおもに「String」というライブラリで纏めて公開されているため、Designer StudioのRecordsブラウザで確認できます。
このトピックでは、Pegaにおける日付の処理方法を纏めて説明します。

型
Pegaでは内部的にBigDecimal(com.ibm.icu.math.BigDecimal)型を使用して、日付の値(1970/01/01からの日数)を保持しています。
なお、YYYYMMDD形式の文字列として日付型プロパティの値を読み書きできます。
但し、から文字列を設定する場合、プロパティの値が自動的に1970101に設定されるため、「空白」の表示にするには、設定処理自体をしないようにしましょう。
計算処理
(日付の加減算を行う)
指定された日付より何日前又は、何日後の日付を計算するには、addDays()関数を使用します。
- 構文
@(Pega-RULES: BusinessCalendar).addDays(startDate, daysToAdd, useBusinessCalendar, calendarName) - 例
例1: @(Pega-RULES: BusinessCalendar).addDays("20190808",30,false,Default) ⇒ 20190907
例2: @(Pega-RULES: BusinessCalendar).addDays("20190808",-9,false,Default) ⇒ 20190730
(日数を求める)
二つの日付の間の日数を計算するには、differenceBetweenDays()関数を使用します。
- 構文
@differenceBetweenDays(firstDate, secondDate, useBusinessCalendar, calendarName) - 例
@differenceBetweenDays("20190808","20190701",false,DEFAULT) ⇒ 38
(月の末日を取得する)
Calendar cal = Calendar.getInstance(); DateTimeUtils dtu = ThreadContainer.get().getDateTimeUtils(); //get info of date in parameter cal.setTime(dtu.parseDateTimeString(theDate)); calc.set(Calendar.DATE, c.getActualMaximum(Calendar.DATE)); Date lastDate = c.getTime(); return dtu.formatDateTime(dtu.formatDateTimeStamp(lastDate),"yyyyMMdd",null,null);
チェック処理
(営業日かどうかをチェック)
営業日かどうかをチェックするには、isBusinessDay()関数を使用します。
- 構文
@isBusinessDay(theDate, calendarName) - 例
例1: @isBusinessDay("20190803",DEFAULT) ⇒ true // 土曜日、法定休日でないため、営業日扱い
例2: @isBusinessDay("20190804",DEFAULT) ⇒ false // 日曜日
JavaVMとは
JavaVM(Java仮想マシン、Java Vitrual Machine、JVM)とは、Javaプログラムを実行するためのソフトウェアのことです。
JavaVMはWindowsやUnix、linux、MacOSなどのOSの上に動作するものですので、環境OS毎にそれぞれ異なる実装が作成されます。
それによって、Javaプログラムは「Write once, run anywhere」(WORA、一度書けば、どこでも実行できる)という特徴があり、特にプラットフォームに依存しません。
以下の図でそれらの階層関係を示します。

JREとJDK
JRE(Java Runtime Environment)とは、Javaプログラムの実行環境です。JavaVMとJavaプログラム実行に必要なライブラリが含まれています。
JDK(Java Development Kit)とは、Javaプログラムの開発環境です。JDKにはJREとJavaプログラムの開発に必要なツールなどが含まれています。
クラス
Javaプログラムの基本構成単位はクラスです。
コンパイルでネイティブ・コードを作成する C や C++ などの言語は、通常、ソース・コードをコンパイルした後、リンクを行う必要があります。このリンク処理では、ソース・ファイルを別々にコンパイルして得られたコードおよび共有のライブラリー・コードをマージして、1個の実行プログラムが作成されます。
クラスのリンクは、別個の手順としてではなく、JVM がクラスをメモリーにロードする際の処理の一部として行われます











