我有这个小消息制作人:
public static void main(String[] args) throws Exception {
BasicConfigurator.configure();
Properties env = new Properties();
InputStream is = Producer.class.getResourceAsStream("/jms.properties");
env.load(is);
Context context = new InitialContext(env);
ConnectionFactory factory = (ConnectionFactory) context.lookup("jms/RemoteConnectionFactory");
Destination queue = (Destination) context.lookup("jms/demoQueue");
JMSContext jmsContext = factory.createContext();
jmsContext.createProducer().send(queue, "Message");
}
使用以下属性:
java.naming.factory.initial = org.wildfly.naming.client.WildFlyInitialContextFactory
java.naming.provider.url = http-remoting://localhost:8080
java.naming.security.principal = alex
java.naming.security.credentials = password
messagingProvider = demo
connectionFactoryNames = QueueFactory
queue.queueReq = jms.queueReq
queue.queueResp = jms.queueResp
但我得到一个例外:
“引起:javax.jms.JMSSecurityException:AMQ119031:无法 验证用户“
我相信我在服务器上配置错误。但到底是什么?安全设置具有以下模式:#with role guest和admin。我没有看到任何与安全相关的内容
答案 0 :(得分:2)
使用2个参数调用重载的createContext()
方法:
JMSContext context = factory.createContext("alex", "password");
如果“alex”用户分配了正确的角色,它应该有用。
我记得我和开发人员讨论了createContext()
应该如何工作(它与Elytron有关 - 新的安全子系统),现在的解决方案就是:它按设计工作,但将来可以加强。
有关详细信息,请参阅comments in JBEAP-10527。