instalar - jboss para principiantes
JBoss EAP 6.3: HQ119031: no se puede validar usuario: nulo (2)
La documentación de EAP lo codifica para:
(...) establezca allowClientLogin en verdadero (...) Si desea que HornetQ se autentique usando la seguridad propagada, establezca authoriseOnClientLogin en true también.
Pero debido al error HORNETQ-883, debes desactivar la seguridad de los mensajes:
<hornetq-server>
<!-- … -->
<security-enabled>false</security-enabled>
<!-- … -->
</hornetq-server>
ERROR HQ224018: Error al crear la sesión: HornetQException [errorType = SECURITY_EXCEPTION message = HQ119031: Imposible validar usuario: null]
Cuando el servidor Jboss EAP 6.3 está a punto de recibir el mensaje JMS. Tengo el usuario autenticado con éxito mediante el subsistema remoting
entonces ¿por qué el usuario es nulo? ¿Cómo superar este error?
En resumen, si su cliente JMS se está conectando desde su contenedor JEE y no necesita proporcionar credenciales para conectarse a JMS (cuando llame a factory.createConnection()
), entonces obtenga conexiones usando el conector InVM
. InVM Connector no requiere credenciales al abrir una conexión a JMS (ya que la persona que llama se encuentra dentro de la instancia de JVM, de ahí el nombre), pero aún impone la seguridad para los clientes de Remote JMS. Los conectores y ConnectionFactories se configuran en el subsistema urn:jboss:domain:messaging
de standalone.xml
.
De lo contrario, si no usa el Conector InVM con seguridad habilitada, probablemente necesite ejecutar el script de add-user
en [jboss-home]/bin
para agregar credenciales de cliente al archivo appilcation-users.properties
y suministrar esos credenciales al llamar a factory.createConnection(username, pwd)
para clientes remotos e InVM que se conectan a través de fábricas disponibles remotamente.
Detalles de Gory
En nuestra instancia de JBoss EAP 6.4, la seguridad debe permanecer habilitada para las conexiones remotas (fuera de la JVM), por lo que nuestras <security-settings>
para HornetQ se especifican de manera adecuada. En consecuencia, JMS ConnectionFactory dicta el nivel de seguridad en función del Conector con el que está configurado.
<hornetq-server>
<connectors>
<!-- additional connectors here -->
...
<in-vm-connector name="in-vm" server-id="0"/>
</connectors>
<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<!-- JNDI bindings here -->
<entry name="java:/ConnectionFactory" />
</entries>
</connection-factory>
...
</jms-connection-factories>
Entonces, en el cliente JMS, aplique la placa de caldera de conexión estándar:
InitialContext context = new InitialContext();
javax.jms.ConnectionFactory factory = (ConnectionFactory) context.lookup("java:/ConnectionFactory");
y al crear la conexión:
javax.jms.Connection connection = factory.createConnection();
JMS Transactado
Para conexiones de clientes dentro del contenedor con InVM
a JMS, nuestra InVM
ConnectionFactory se configura de esta manera:
<jms-connection-factories>
...
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
Obtenga la JMS ConnectionFactory tramitado como tal:
InitialContext context = new InitialContext();
javax.jms.ConnectionFactory factory = (ConnectionFactory) context.lookup("java:/JmsXA");