当我使用JavaAPI从插件打印时,IBMRhapsody日志为空

当我使用JavaAPI从插件打印时,IBMRhapsody日志为空,java,plugins,rhapsody,Java,Plugins,Rhapsody,我试着制作我的第一个Rhapsody插件,到目前为止,我成功地将该插件显示在“工具”选项卡下 到目前为止,我是在我的项目中写的,但是日志选项卡保持不变 @Override public void RhpPluginInit(IRPApplication rpyApplication) { IRPApplication rpy = RhapsodyAppServer.getActiveRhapsodyApplication(); rpy.writeToOutputWindo

我试着制作我的第一个Rhapsody插件,到目前为止,我成功地将该插件显示在“工具”选项卡下

到目前为止,我是在我的项目中写的,但是日志选项卡保持不变

    @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的完整路径

最后,我有两个问题:

  • 为什么Rhapsody中的日志选项卡中没有打印消息

  • 如果我修改消息,我必须重新加载帮助程序才能看到更改?如果是,如何正确执行

  • 谢谢, 丹尼尔

    丹尼尔, 不要因为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”

  • 是的,遗憾的是,每次更改插件代码时,都需要重新启动Rhapsody
  • 要进行更精确的调试,请将此项添加到[JVM]部分的rhapsody.ini文件中:

    对于使用Eclipse进行调试:

    [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”

  • 是的,遗憾的是,每次更改插件代码时,都需要重新启动Rhapsody
  • 要进行更精确的调试,请将此项添加到[JVM]部分的rhapsody.ini文件中:

    对于使用Eclipse进行调试:

    [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外部运行的插件或脚本。)

    问候,, 西蒙