8.6.5. Rhapsody¶
8.6.5.1. Installation of the Rhapsody plugin¶
Beginning with Rhapsody 8.2, no installation is needed.
Instead, rpy2rfg internally uses a command of RhapsodyCL.exe to
load the required .hep file.
If you installed rpy2rfg via rhapsody.ini, adding a rpy2rfg
profile (*.hep) to your Rhapsody model, or adding the
rpy2rfg.hep to your own profile/hep file, it is recommended to
remove the entry. As rpy2rfg requests Rhapsody to load the necessary hep
file via commandline option, no additional installation is needed.
Note
Note
Sometimes, Rhapsody API calls cause problems, e.g. stack overflows. In such a
situation, they can be omitted with the parameter --ignore_rhapsody_methods.
It is possible to ignore more than one method by repeating the parameter. E.g.:
rpy2rfg -r input.rfg output.rfg --rhapsody_path "C:Program Files
(x86)IBMRationalRhapsody8.2.1RhapsodyCL.exe" --rpy_file model.rpy
--ignore_rhapsody_methods IRPUnit.getCurrentDirectory --ignore_rhapsody_methods
IRPModelElement.getIconFileName
8.6.5.2. Rhapsody and COM¶
Rhapsody uses COM to communicate between Java plugins and the main application. Files necessary for COM communication are registered in the Windows registry globally. The location in the registry is the same for all Rhapsody 8.x versions until 8.3.0. Rhapsody 8.3.1 uses a different location.
The globally registered files are not ABI compatible between different Rhapsody versions. So when choosing e.g. Rhapsody 8.2.1 for importing but Rhapsody 8.3.0 is registered, the import will fail.
rpy2rfg registry check¶
The registry check does not work in rpy2rfg standalone mode (argument
--no_plugin is given). It is only active on Windows. In plugin mode, it is
executed after retrieving the Rhapsody version (through a COM call), so rpy2rfg
may still crash with a weird Rhapsody exception when this early call fails. Rhapsody
8.3.1 uses a different registry key, so the check is disabled on Rhapsody 8.3.1+.
To avoid crashing with weird exceptions thrown by Rhapsody, the registered .tlb file is
checked. If the given Rhapsody path (path to the RhapsodyCL.exe) is inconclusive
to the registered path in the registry, rpy2rfg will abort. The abortion can be
disabled with the argument --ignore_rhapsody_check_error or --keep_flying.
--ignore_rhapsody_check_error will just ignore the result of the registry check
whereas --keep_flying will ignore further fatal errors. rpy2rfg still
prints the error message.
Register Rhapsody in the registry¶
Try one of the following. The top option is the most preferred one. The commands are executed in the Rhapsody installation directory. They likely will need administrator rights.
rhapsody.exe /RegServerregsvr32 Rhapsodyserver.dllrhapsody.reg
See https://web.archive.org/web/20191226181806/https://www.ibm.com/developerworks/community/forums/html/topic?id=f5e8e705-f0c7-4854-a39c-309ee445c3fe for more information.
Debugging Rhapsody not loading rpy2rfg or crashing during rpy2rfg loading¶
Overview of the log files in IBM Rational Rhapsody
To narrow down the step which fails, please execute the following steps
which load more rpy2rfg relevant code each step. Be aware that the argument
of -cmd=load_hep must be quoted IFF it contains special
characters like spaces but not otherwise.
Does work:
-cmd=load_hep C:\Users\user\MyModel\MyModel.rpyx
-cmd=load_hep "C:\Users\user\My Model\My Model.rpyx"
Does not work:
-cmd=load_hep "C:\Users\user\MyModel\MyModel.rpyx"
-cmd=load_hep C:\Users\user\My Model\My Model.rpyx
Step 1 (just load the model without anything Axivion rpy2rfg related):
cd /d "<path-to-model-directory>"
"<path-to-rhapsody>\RhapsodyCL.exe" -verbose -cmd=loadjvm -cmd=GetCommandResult -cmd=open "<path-to-model.rpy(x)>" -cmd=GetCommandResult -cmd=close NoSave -cmd=exit -cmd=GetCommandResult
echo ErrorLevel: %ERRORLEVEL%
Step 2 (set required environment):
rem e.g.: "set AXIVION_BASE_DIR=C:\Program Files (x86)\Bauhaus"
set "AXIVION_BASE_DIR=<path-to-axivion-suite>"
cd /d "<path-to-model-directory>"
"<path-to-rhapsody>\RhapsodyCL.exe" -verbose -cmd=loadjvm -cmd=GetCommandResult -cmd=open "<path-to-model.rpy(x)>" -cmd=GetCommandResult -cmd=close NoSave -cmd=exit -cmd=GetCommandResult
echo ErrorLevel: %ERRORLEVEL%
Step 3 (load rpy2rfg):
rem e.g.: "set AXIVION_BASE_DIR=C:\Program Files (x86)\Bauhaus"
set "AXIVION_BASE_DIR=<path-to-axivion-suite>"
cd /d "<path-to-model-directory>"
"<path-to-rhapsody>\RhapsodyCL.exe" -verbose -cmd=loadjvm -cmd=GetCommandResult -cmd=open "<path-to-model.rpy(x)>" -cmd=GetCommandResult -cmd=load_hep "%AXIVION_BASE_DIR%\doc\Rhapsody\rpy2rfg.hep" -cmd=GetCommandResult -cmd=close NoSave -cmd=exit -cmd=GetCommandResult
echo ErrorLevel: %ERRORLEVEL%
Step 4 (execute rpy2rfg):
rem e.g.: "set AXIVION_BASE_DIR=C:\Program Files (x86)\Bauhaus"
set "AXIVION_BASE_DIR=<path-to-axivion-suite>"
cd /d "<path-to-model-directory>"
"<path-to-rhapsody>\RhapsodyCL.exe" -verbose -cmd=loadjvm -cmd=GetCommandResult -cmd=open "<path-to-model.rpy(x)>" -cmd=GetCommandResult -cmd=load_hep "%AXIVION_BASE_DIR%\doc\Rhapsody\rpy2rfg.hep" -cmd=GetCommandResult -cmd=call "rpy2rfg" -cmd=GetCommandResult -cmd=close NoSave -cmd=exit -cmd=GetCommandResult
echo ErrorLevel: %ERRORLEVEL%