Question

Je dois exécuter un fournisseur JNDI sans la surcharge d’un conteneur J2EE. J'ai essayé de suivre les instructions de cet article , qui décrit (à la page 3) exactement ce que je veux faire. Malheureusement, ces directions échouent. Je devais aussi ajouter jboss-common.jar à mon classpath. Une fois que j'ai fait cela, je reçois une trace de pile:

$ java org.jnp.server.Main
0    [main] DEBUG
org.jboss.naming.Naming  - Creating
NamingServer stub, theServer=null,rmiPort=0,clientSocketFactory=null,serverSocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076[bindAddress=null]
Exception in thread "main"
java.lang.NullPointerException
     at org.jnp.server.Main.getNamingInstance(Main.java:301)
     at org.jnp.server.Main.initJnpInvoker(Main.java:354)
     at org.jnp.server.Main.start(Main.java:316)
     at org.jnp.server.Main.main(Main.java:104)

J'espère que cela fonctionnera, mais je serais également ouvert à d'autres fournisseurs JNDI autonomes légers. Tout cela pour faire fonctionner ActiveMQ et si quelqu'un peut suggérer un autre fournisseur JMS léger qui fonctionne bien en dehors de la machine virtuelle, les clients se trouvent sans un serveur d'applications complet qui fonctionnerait également.

Était-ce utile?

La solution

Apache ActiveMQ est déjà fourni avec un fournisseur JNDI léger intégré. Consultez ces instructions d'utilisation .

En gros, vous ajoutez simplement le fichier jndi.properties au chemin de classe et vous avez terminé.

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

# use the following property to configure the default connector
java.naming.provider.url = failover:tcp://localhost:61616

# use the following property to specify the JNDI name the connection factory
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry

# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue


# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

Autres conseils

Utilisez un fichier jndi.properties comme celui-ci:

java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory

# use the following property to configure the default connector
java.naming.provider.url=tcp://jmshost:61616

# use the following property to specify the JNDI name the connection factory
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry

# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
#queue.MyQueue = example.MyQueue


# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.myTopic = MY.TOPIC

Assurez-vous que ce fichier est dans votre chemin de classe. Ensuite, vous pouvez rechercher le sujet / la file d’attente comme ceci (moins l’essai / attrape approprié):

context = new InitialContext(properties);

context = (Context) context.lookup("java:comp/env/jms");

topicConnectionFactory = (TopicConnectionFactory) context.lookup("ConnectionFactory");

topic = (Topic) context.lookup("myTopic");

JBoss JMQ peut également être exécuté avec uniquement le MicroKernel et un ensemble très minimal de bibliothèques. Le programme d’installation de JBoss AS propose des options pour les "profils". dont l’un est pour un JMQ autonome. Cela vous permet également de choisir des composants (bien que cela ne vous aide pas trop avec les dépendances). Avez-vous essayé d'exécuter le programme d'installation?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top