嵌入式 Glassfish 和 `imqcmd`

Mat*_*teo 3 glassfish glassfish-embedded

我们在测试环境中使用嵌入式 Glassfish 服务器。我们使用org.glassfish.embeddable.CommandRunner界面来执行管理任务(即,我们asadmin使用标准的独立 Glassfish 服务器执行的操作)

例子:

GlassFish glassfish = GlassFishRuntime.bootstrap( bp ).newGlassFish( gfp );
CommandRunner commandRunner = glassfish.getService( CommandRunner.class );
commandRunner.run(
  "create-jms-resource",
  "--restype",
  "javax.jms.Queue",
  "SOME_QUEUE_NAME"
);
Run Code Online (Sandbox Code Playgroud)

现在在命令行上,我可以使用imqcmd. 例如

imqcmd -u admin -passfile ../password.txt update dst -n SOME_QUEUE_NAME -t q -o maxBytesPerMsg=-1 -f
Run Code Online (Sandbox Code Playgroud)

有没有办法通过嵌入式 Glassfish 服务器实现相同的目标?

小智 5

imqcmd您可以使用asadmin子命令create-jmsdest来创建 JMS 物理目标,而不是使用。

文档create-jmsdest

通常,您使用create-jms-resource子命令创建一个 JMS 目标资源,该资源具有一个指定物理目标的 Name 属性。当您运行使用目标资源的应用程序时,会自动创建物理目标。create-jmsdest如果要使用非默认属性设置创建物理目标,请使用子命令。

如果您没有为 指定 Name 属性create-jms-resource,则物理目标的名称与目标资源的名称相同(用下划线替换 JNDI 名称中的任何正斜杠)。

因此,asadmin您要运行的命令例如:

create-jms-resource --restype javax.jms.Queue org/example/foo/SomeQueue
create-jmsdest --desttype queue --property maxBytesPerMsg=-1:maxTotalMsgBytes=-1 org_example_foo_SomeQueue
Run Code Online (Sandbox Code Playgroud)

请注意,(与 不同imqcmd update dstcreate-jmsdest如果资源已存在,则不会更新属性。因此,您不应在两个命令之间启动您的应用程序,否则将使用默认属性自动创建资源。

如果您必须更新属性,您可以首先使用例如删除物理目的地asadmin delete-jmsdest org_example_foo_SomeQueue