java jboss jms hornetq

¿Escribir un programa Java para conectarse al servicio de mensajería HornetQ en Jboss EAP 6.3?



jms (2)

Estoy usando Jboss EAP 6.3 y necesito usar el servicio de mensajería. He trabajado en Jboss 4x, donde podemos hacer conexiones fácilmente usando el siguiente código:

public static final String PROVIDER_URL = "jnp://localhost:5445"; public static final String JNP_INTERFACES = "org.jboss.naming:org.jnp.interfaces"; public static final String INITIAL_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory"; private static Context initialContext; public static Context getInitialContextForClient() throws NamingException{ if(initialContext == null){ Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); prop.put(Context.URL_PKG_PREFIXES,JNP_INTERFACES); prop.put(Context.PROVIDER_URL, PROVIDER_URL); initialContext = new InitialContext(prop); } return initialContext; }

¿Trabajará por encima del camino en EAP 6.3 para conectarse a HornetQ? En caso afirmativo, ¿qué otras configuraciones se requieren? Además, encontré que 1099 tampoco está configurado por defecto en standalone.xml.

A continuación, se muestran las configuraciones predeterminadas para HornetQ en el archivo Standalone-full.xml:

<subsystem xmlns="urn:jboss:domain:messaging:1.4"> <hornetq-server> <persistence-enabled>true</persistence-enabled> <journal-type>NIO</journal-type> <journal-min-files>2</journal-min-files> <connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> </acceptors> <security-settings> <security-setting match="#"> <permission type="send" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> </security-setting> </security-settings> <address-settings> <address-setting match="#"> <dead-letter-address>jms.queue.DLQ</dead-letter-address> <expiry-address>jms.queue.ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>10485760</max-size-bytes> <page-size-bytes>2097152</page-size-bytes> <address-full-policy>PAGE</address-full-policy> <message-counter-history-day-limit>10</message-counter-history-day-limit> </address-setting> </address-settings> <jms-connection-factories> <connection-factory name="InVmConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> </entries> </connection-factory> <connection-factory name="RemoteConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> <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> <jms-destinations> <jms-queue name="ExpiryQueue"> <entry name="java:/jms/queue/ExpiryQueue"/> </jms-queue> <jms-queue name="DLQ"> <entry name="java:/jms/queue/DLQ"/> </jms-queue> </jms-destinations> </hornetq-server> </subsystem>

Los siguientes son enlaces de socket en el mismo archivo:

<socket-binding name="messaging" port="5445"/> <socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/> <socket-binding name="messaging-throughput" port="5455"/>

Lo intenté más abajo porque no pude ver la clase org.jnp.interfaces.NamingContextFactory en Jboss EAP 6.3:

prop.put(Context.PROVIDER_URL,"localhost:5445"); prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.hornetq.core.remoting.impl.netty.NettyConnectorFactory"); prop.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");

Actualmente, está lanzando la excepción de conexión.

¿Podría alguien sugerir o enviar un programa Java sobre cómo lograr la conexión con Hornetq en Jboss EAP 6.3?

Actualización : todavía no sé si estoy siguiendo el procedimiento correcto de hacer lo mismo.

Las siguientes son excepciones que recibo:

javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jnp.interfaces.NamingContextFactory from classloader ModuleClassLoader for Module

Revisé su jboss-client.jar en bin / client y encontré que la interfaz anterior no está presente, pero está presente en versiones anteriores que contienen jbiss-allclient.jar. No creo que poner eso en esta versión de jboss sea correcto.


De acuerdo con tu stacktrace supongo que no adeptaste tu antigua configuración JNDI a JBoss EAP 6.3

De: http://blog.akquinet.de/2014/09/26/jboss-eap-wildfly-three-ways-to-invoke-remote-ejbs/

Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); prop.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080"); prop.put(Context.SECURITY_PRINCIPAL, "username"); prop.put(Context.SECURITY_CREDENTIALS, "password"); prop.put("jboss.naming.client.ejb.context", false); prop.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); Context context = new InitialContext(prop);

Su aplicación no puede crear una instancia del initialContext, que es un problema en el que debe enfocarse.

Además, me parece un poco extraño que tanto la cola de mensajes como tu jndi intenten conectar localhost: 5445.


Haga clic en este enlace jboss ; que contiene un programa de inicio rápido que resuelve el problema mencionado.

1) Descargue el código; Importar pom.xml de ejecutar jboss-helloworld-jms en netbeans. Ejecutar construcción limpia.

2) Utilice este enlace para resolver problemas de compilación de maven: Pom no encontrado

3) Lo siguiente es un fragmento que solía conectarse al servidor

private static final String DEFAULT_MESSAGE = "Hello, World!"; private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; private static final String DEFAULT_DESTINATION = "jms/queue/test"; private static final String DEFAULT_MESSAGE_COUNT = "1"; private static final String DEFAULT_USERNAME = "quickstartUser"; private static final String DEFAULT_PASSWORD = "quickstartPwd1!"; private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; private static final String PROVIDER_URL = "remote://localhost:4447"; String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY); log.info("Attempting to acquire connection factory /"" + connectionFactoryString + "/""); connectionFactory = (ConnectionFactory) context.lookup(connectionFactoryString); log.info("Found connection factory /"" + connectionFactoryString + "/" in JNDI");

4) Crear usuario "usuario de inicio rápido" / "inicio rápidoPwd1!", En Jboss EAP 6.3; usando adduser.bat en el reino de la aplicación

5) Verifique si estas jms / queue / test y jms / RemoteConnectionFactory existen en Standalone.xml.

6) Ejecuta código como simple aplicación Java y la magia está allí.