Translate

2018/10/24

Papyrus における登録済パッケージのインポート

Papyrus 上でモデル作成を行っている際,作成した他パッケージのモデルを使用したり,すでに Papyrus に登録済のプロファイル内で定義されている他パッケージを使用したいことがあります.
これをうまく使うと,様々なモデル定義(モデルファイル)を効率的に分割して作成・管理でき,また再利用も容易となるため,モデルベースの開発を効率的に行うことが可能となります.

今回はその様なケースにおいて
「すでにPapyrusに登録済のプロファイル内で定義されている他パッケージを使用」
するやり方について考えたく思います.

またその具体的な例として,Papyrus Software Designer を導入することで Papyrus で使用可能となる
「MARTE」… Modeling and Analysis of Real-time and Embedded systems
に登録されている各種パッケージを閲覧・使用することを試してみようと思います.

まず画面上の「Model Explorer」上で対象モデルを選択し,マウス右クリックで現れるドロップダウンリストの Import を選択,そこから
Import Registered Package
を選択します.

Import Registered Package

これにより以下のダイアログ「Libraries to import」が表示されます.


ここに様々な登録済のモデル要素が表示されます.上記の図にも
  • JavaLibrary
  • JavaPrimitiveTypes
  • Pthread (subset)
  • Socket (subset)
  • SysML-Standard-Library
等が見えるかと思いますが,わざわざ自身でモデル定義しなくとも,既にあるものを活用する方が便が良いと思います.ただ,各モデルがいつまでサポートされるかは不明ではありますが.

今回は「MARTE」のパッケージを使用するため,リスト中段くらいにある
MARTE_Library
を選択します.ダイアログの下段あたりに本パッケージが「CEA LIST」により開発・提供されていることが見て取れます.

パッケージを選択し,その後 [OK] を押すと,下記のようなダイアログが表示されます.


ここで一つのポイントがあるのですが,含まれているモデルを Import する際の挙動(Action)として,ダイアログ下側のボタンにも表示されている通り,
  • Load
  • Import
  • Copy
の3種類があることが分かります.

これらの意味(挙動)の違いは以下となります.
  • Load
    • 指定したパッケージを単にモデルにロードする.作成中のモデルには何も変更は発生しない.
  • Import
    • 指定したパッケージをモデルにロードすると共に,モデルから同パッケージに対し PackageImport の関係が設定される(そのため作成中のモデルに変更が発生する)
      • UMLのモデル要素の一つである「PackageImport」は,ある名前空間内にImport先のモデル要素を非修飾名で使用可能とします
  • Copy
    • 指定したパッケージのローカルコピーをモデル内に作成する.Importに似ているが PackageImport の関係を設定せず,対象パッケージに含まれる要素のクローンをモデル内に作成する
またその使い分けは,
  • インポート先のモデル修正も随時行っており,その修正内容を適宜反映したい場合は「Import
  • インポート先のモデルの現バージョンをコピーし,それを元に今回のモデルを構築する場合は「Copy
    • その後のインポート先モデルの変更には影響されない
  • とりあえずインポート先のモデルを使ってみたい場合は「Load
となるかなと思います.

先のダイアログに戻ります.

表示されているすべてのモデル(パッケージ)に対して「全て同じ」操作をしたい場合には,ダイアログ上の [… All] のボタンを使用します.
また表示されているモデル中の特定パッケージを使用したい場合には,チェックボックスにチェックをします.その際,Load なのか Import なのか Copy なのかは選択したすべてのパッケージに対して共通であることに注意が必要です.

今回は [Import All] で進めることにします.
[Import All] のボタンをクリックし,その後,[OK] ボタンをクリックします.

これにより Model Explorer 上に対象のモデルパッケージが表示されます.
下記の図では上から3つ目のパッケージ「≪ModelLibrary》 MARTE_Library」です.

≪ModelLibrary》 MARTE_Library

MARTEの仕様では,その Profile 内で様々なパッケージが定義されており,それらが作成中のモデル内で使用可能であることが見て取れると思います.


Import対象がプロファイルの場合には,一般的には作成中のモデルに Profile を適用し,そこに含まれるステレオタイプを自身のモデルに指定することが多いかと思いますが,そもそもProfile 定義の中身がどうなっているかを確認したいケースではこのモデルのインポートは大変役に立ちます.


Papyrus が起動しない / Java VM

Papyrus-2018.9 を起動しようとしたら起動しなくなりました...

エラーを告げるダイアログがいっぱい出てきます.

Error: opening registry key 'Software\JavaSoft\JRE
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment

これらは Java Virtual Machine Launcher が出しているものですね.
この後に Eclipse 自体のエラー出力が表示されます.
タイトルには Papyrus と表示されていますがベースとなる Eclipse そのもののエラーです.

Java was started but returned exit code=2
Papyrus(Eclipse)が使用している JavaVM に問題があるとのことですが,さて何かしたかしらん,と考えてみると,そいえば少し前に Java の update が表示され対応したことを思い出しました.
確かにいつもとは違うアップデート画面で,インストールされているものを削除するという手順があったため,色々と削除したことを思い出しました.
Javaはほっておくと色々なバージョンがインストールされてしまうため,古い奴を消してくれる便利機能でも追加されたのかなと深く考えなかったのですが,どうやら違ったみたいです :-)

コマンドプロンプトをあげて javaw.exe や javac.exe をたたいてみても,同じようなメッセージがテキストで表示されました:
c:\Eclipse\papyrus-2018-09-4.1.0-win64\Papyrus>java
Error: opening registry key 'Software\JavaSoft\JRE'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

さてはてと考えていると,ふと先日, Oracle がJavaのライセンスやリリースモデルを変更するってニュースリリースしてたなぁ,と思い出しました.詳細はここに書いてあるものです:
JDKの新しいリリース・モデルおよび提供ライセンスについて
まぁ今もちゃんと読んではいませんが,ようは無償で使う場合には今後は OpenJDK を使ってね,ということでしょうかね(笑).
Linux環境では OpenJDK を普通に使っているのですが,Windowsでは Oracle JDK をこれまでずっと使っていました.
今回は Oracle JDK から OpenJDK に移行しないといけない状況での不連続点なのかもしれません.

確かに Eclipse/Papyrus を動作させる際,Windows下で使用される JavaVM の問題が発生したこともあり,どうしてもJavaVMを固定化したい場合には Eclipse/Papyrus のインストールフォルダの下に `jreフォルダ' を作成し,そこに JavaVM をコピーして使ったりしていました.もしくは Eclipse の ini ファイルを編集して,使用する JavaVM を固定化したりと.前者は複数人で同じ環境を使う場合(Eclipse/Papyrus環境を配布したりする場合),後者は自分単独で使う場合の対応として使い分けています.

感覚的にはそのような状況と同じような対応をすれば良いかなと.

では,と,OpenJDKをインストールします.
OpenJDK は jdk.java.net からダウンロードできます.現時点での最新版は以下のページから入手可能です:
Java Platform, Standard Edition 11 Reference Implementations

これまでの .exe 形式のインストーラではなく .zip での配布ですね.個人的にはどっちでも,です.

ファイル
openjdk-11+28_windows-x64_bin.zip
をダウンロードし,以下のように C:\OpenJDK フォルダの下で展開しました:


その後,Papyrus のインストールフォルダに行き,ファイル papyrus.ini に以下のように使用する JavaVM を陽に指定しました(赤色の太字の所).
-vm
C:\OpenJDK\jdk-11\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.800.v20180827-1352
-showsplash
org.eclipse.papyrus.rcp
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Xms256m
-Xmx900m
-Dosgi.bundlefile.limit=200
赤色の太字以外は元々の設定です.
もしかしたらメモリ関係の設定値を増やしているやもしれませんが忘れました(笑)

これで再度 Papyrus を実行すると,無事に起動しました.