Domanda

Devo eseguire un provider JNDI senza l'overhead di un contenitore J2EE. Ho provato a seguire le indicazioni in questo articolo , che descrive (a pagina 3) esattamente cosa voglio fare. Sfortunatamente, queste direzioni falliscono. Ho dovuto aggiungere jboss-common.jar anche al mio percorso di classe. Una volta fatto ciò, ottengo una traccia dello stack:

$ 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)

Spero di farlo funzionare, ma sarei aperto anche ad altri fornitori JNDI autonomi leggeri. Tutto questo per far funzionare ActiveMQ e se qualcuno può suggerire un altro provider JMS leggero che funziona bene al di fuori della VM, i client si trovano senza un app server completo che funzioni anche.

È stato utile?

Soluzione

Apache ActiveMQ è già dotato di un provider JNDI leggero integrato. Vedi queste istruzioni su come usarlo .

Fondamentalmente aggiungi semplicemente il file jndi.properties al percorso di classe e il gioco è fatto.

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

Altri suggerimenti

Utilizza un file jndi.properties come questo:

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

Assicurati che questo file sia nel tuo percorso di classe. Quindi puoi cercare l'argomento / coda in questo modo (meno tentativi / catture appropriate):

context = new InitialContext(properties);

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

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

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

JBoss JMQ può anche essere eseguito solo con MicroKernel e un set di librerie molto minimale. Il programma di installazione di JBoss AS ha opzioni per "profili" uno dei quali è per un JMQ autonomo. Ti permette anche di scegliere i componenti (anche se non ti aiuta troppo con le dipendenze). Hai provato a eseguire il programma di installazione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top