当我使用JavaAPI从插件打印时,IBMRhapsody日志为空
我试着制作我的第一个Rhapsody插件,到目前为止,我成功地将该插件显示在“工具”选项卡下 到目前为止,我是在我的项目中写的,但是日志选项卡保持不变当我使用JavaAPI从插件打印时,IBMRhapsody日志为空,java,plugins,rhapsody,Java,Plugins,Rhapsody,我试着制作我的第一个Rhapsody插件,到目前为止,我成功地将该插件显示在“工具”选项卡下 到目前为止,我是在我的项目中写的,但是日志选项卡保持不变 @Override public void RhpPluginInit(IRPApplication rpyApplication) { IRPApplication rpy = RhapsodyAppServer.getActiveRhapsodyApplication(); rpy.writeToOutputWindo
@Override
public void RhpPluginInit(IRPApplication rpyApplication) {
IRPApplication rpy = RhapsodyAppServer.getActiveRhapsodyApplication();
rpy.writeToOutputWindow("Log", "test\n");
}
我的.hep文件如下所示
MyPluginProfile.hep:
[Helpers]
numberOfElements=2
name1=MyPlugin
JavaMainClass1=Pack.MyPlugin
JavaClassPath1=D:\Work\eclipseWS\rhapsodyIntegr
isPlugin1=1
isVisible1=1
DLLServerCompatible1=1
name2=Invoke MySimplePlugin
isPluginCommand2=1
command2=MyPlugin
applicableTo2=ObjectModelDiagram
isVisible2=1
applicableToProfile1=SimplePluginProfile
DLLServerCompatible2=1
我在Rhapsody中从文件>项目属性>属性选项卡>选定的“视图”中导入了它,该视图由“helper”“>Helpers文件过滤。在那里,我给出了MyPluginProfile.hep的完整路径
最后,我有两个问题:
[JVM]
Options=ClassPath,LibPath,MaxHeap,MaxStack,EclipseDebug
EclipseDebug=agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y
或用于JDB调试:
Options=ClassPath,LibPath,MaxHeap,MaxStack,JDBDebug
JDBDebug=-agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=y
丹尼尔,
不要因为Rhapsody GUI中的工具菜单下有一个条目而误以为插件工作正常。如果Rhapsody加载您的插件时出现任何问题,工具菜单中的条目仍会显示,但您的插件仍可能被破坏。解决问题的最佳方法是更新Rhapsody.ini文件并添加一个条目,告知Rhapsody调试插件活动。在[常规]部分,输入以下内容:
[一般]
JavaAPILogFile=c:\temp\rhap814.log
然后,重新启动Rhapsody并重新加载模型。(顺便说一句,我假设您有一个对应的.sbs文件,其名称与您的.hep文件的名称匹配,并且您已经“添加到模型”了该.sbs配置文件。)然后查看该日志文件以了解可能存在的问题。通常是类路径错误。有两种方法可以指定plugin.class文件的位置,一种是目录,另一种是jar文件。您的hep文件在JavaClasspath1属性中没有指定.jar文件,因此我假设它是前者。如果已经创建了.jar文件,则需要将其附加到JavaClasspath1属性值中
重要提示:一旦插件正常工作,请删除Rhapsody.ini中的JavaAPILogFile条目(最好是在前面加上分号“”)。否则,插件性能将下降10倍。此外,请检查第二个帮助程序中的“ApplicatableToProfile1”条目。它的结尾应该是“2”,而不是“1”
[JVM]
Options=ClassPath,LibPath,MaxHeap,MaxStack,EclipseDebug
EclipseDebug=agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y
或用于JDB调试:
Options=ClassPath,LibPath,MaxHeap,MaxStack,JDBDebug
JDBDebug=-agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=y
你发布的代码可能还有另一个障碍。
RhpPluginInit()
的实现使用RhapsodyAppServer
获取对Rhapsody的引用。如果您有多个Rhapsody实例正在运行,这将返回对首先启动的实例的引用,而不一定是从中运行插件的实例。因此,您的日志消息可能出现在Rhapsody的错误实例中
解决方案很简单-将代码更改为:
@Override
public void RhpPluginInit(IRPApplication rpy) {
rpy.writeToOutputWindow("Log", "test\n");
}
(RhapsodyAppServer通常不需要在插件代码中使用-它通常只需要在Rhapsody外部运行的插件或脚本。)
问候,,
西蒙你发布的代码可能还有另一个障碍。
RhpPluginInit()
的实现使用RhapsodyAppServer
获取对Rhapsody的引用。如果您有多个Rhapsody实例正在运行,这将返回对首先启动的实例的引用,而不一定是从中运行插件的实例。因此,您的日志消息可能出现在Rhapsody的错误实例中
解决方案很简单-将代码更改为:
@Override
public void RhpPluginInit(IRPApplication rpy) {
rpy.writeToOutputWindow("Log", "test\n");
}
(RhapsodyAppServer通常不需要在插件代码中使用-它通常只需要在Rhapsody外部运行的插件或脚本。)
问候,,
西蒙