I'm new for using Wildfly. I try to test jms activatemq with simple code. But always error : AMQ119031: Unable to validate user from /127.0.0.1:61082. Username: null; SSL certificate subject DN: unavailable. I had added the user testjms to application-users with guest group:

What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[guest]: guest

This user: "testjms" and the group "guest" ware not found in the admin console.

I didn't changed the standalone-full.xml for messaging-activemq:

<subsystem xmlns="urn:jboss:domain:messaging-activemq:6.0">
        <server name="default">
            <statistics enabled="${wildfly.messaging-activemq.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
            <security-setting name="#">
                <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
            </security-setting>
            <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
            <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
            <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
                <param name="batch-delay" value="50"/>
            </http-connector>
            <in-vm-connector name="in-vm" server-id="0">
                <param name="buffer-pooling" value="false"/>
            </in-vm-connector>
            <http-acceptor name="http-acceptor" http-listener="default"/>
            <http-acceptor name="http-acceptor-throughput" http-listener="default">
                <param name="batch-delay" value="50"/>
                <param name="direct-deliver" value="false"/>
            </http-acceptor>
            <in-vm-acceptor name="in-vm" server-id="0">
                <param name="buffer-pooling" value="false"/>
            </in-vm-acceptor>
            <jms-queue name="test" entries="java:/jms/queue/test java:jboss/exported/jms/queue/test"/>
            <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
            <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
            <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
            <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/>
                           <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
        </server>
    </subsystem>

The remote client code :

public static void main(String[] args) {

        Context namingContext = null;

        try {
           // String userName = System.getProperty("username", DEFAULT_USERNAME);
           // String password = System.getProperty("password", DEFAULT_PASSWORD);

            // Set up the namingContext for the JNDI lookup
            final Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
            env.put(Context.PROVIDER_URL, "http-remoting://localhost:8980");
            env.put(Context.SECURITY_PRINCIPAL, "testjms");
            env.put(Context.SECURITY_CREDENTIALS, "t-123456");
            namingContext = new InitialContext(env);

            // Perform the JNDI lookups
           // String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY);
          System.out.println("Attempting to acquire connection factory RemoteConnectionFactory");              
            ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup("jms/RemoteConnectionFactory");
            System.out.println("Found connection factory  in JNDI");
            String destinationString = System.getProperty("destination", "jms/queue/test");
            System.out.println("Attempting to acquire destination \"" + destinationString + "\"");              
            Destination destination = (Destination) namingContext.lookup(destinationString);
            System.out.println("Found destination \"" + destinationString + "\" in JNDI");
            int count = 3;
            String content = "message envoyé par TestRemoteSAC";            
            try (JMSContext context = connectionFactory.createContext()) {
                System.out.println("Sending " + count + " messages with content: " + content);
                // Send the specified number of messages
                for (int i = 0; i < count; i++) {
                    context.createProducer().send(destination, content);
                }
                // Create the JMS consumer
                JMSConsumer consumer = context.createConsumer(destination);
                // Then receive the same number of messages that were sent
                for (int i = 0; i < count; i++) {
                    String text = consumer.receiveBody(String.class, 5000);
                    System.out.println("Received message with content " + text);
                } 
            }            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            if (namingContext != null) {
                try {
                    namingContext.close();
                } catch (NamingException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }

Thanks very much if someone has idea.

1

There are 1 best solutions below

2
On

I found the solution: juste add user and password in the method for remote call:

JMSContext context = connectionFactory.createContext(user, password)