嵌入式Glassfish和`imqcmd`

时间:2012-03-27 08:41:52

标签: glassfish glassfish-embedded

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

示例:

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"
);

现在在命令行上,我可以使用imqcmd设置队列选项。例如

imqcmd -u admin -passfile ../password.txt update dst -n SOME_QUEUE_NAME -t q -o maxBytesPerMsg=-1 -f

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

1 个答案:

答案 0 :(得分:4)

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

来自create-jmsdest上的documentation

  

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

如果没有为create-jms-resource指定Name属性,则物理目标的名称与目标资源的名称相同(用下划线替换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

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

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