我们在测试环境中使用嵌入式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服务器上实现相同的目标?
答案 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
。