2010-06-01 12 views
8

Ho un esempio funzionante di invio di messaggi a server e server che lo ricevono tramite qpid messaging. Ecco semplice ciao mondo da inviare al server:Java JMS Messaging

http://pastebin.com/M7mSECJn

E qui è il server che riceve le richieste e invia la risposta (il client corrente non riceve risposta):

http://pastebin.com/2mEeuzrV

qui è il mio file di proprietà:

http://pastebin.com/TLEFdpXG

Tutti funzionano perfettamente, posso vedere i messaggi nella coda qpid tramite la console di gestione Qpid JMX. Questi esempi sono scaricati da https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/example (qualcuno potrebbe averne bisogno anche).

Ho eseguito la messaggistica Jboss utilizzando la primavera precedente, ma non riesco a fare lo stesso con qpid. Con JBoss all'interno applicationsContext avevo fagioli jndiTemplate, conectionFactory, destinationQueue, e jmscontainer come questo:

<!-- Queue configuration --> 
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
    <props> 
    <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 
    <prop key="java.naming.provider.url">jnp://localhost:1099</prop> 
    <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> 
    <prop key="java.naming.security.principal">admin</prop> 
    <prop key="java.naming.security.credentials">admin</prop> 
    </props> 
    </property> 
</bean> 

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate" /> 
    <property name="jndiName" value="ConnectionFactory" /> 
</bean> 

<bean id="queueDestination" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate" /> 
    <property name="jndiName"> 
    <value>queue/testQueue</value> 
    </property> 
</bean> 

    <bean id="jmsContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destination" ref="queueDestination" /> 
    <property name="messageListener" ref="listener" /> 
</bean> 

e, naturalmente, mittente e chi ascolta:

<bean id="sender" class="com.practice.Sender"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="queueDestination" ref="queueDestination" /> 
</bean> 


<bean id="listener" class="com.practice.MsgListener" /> 

ora mi piacerebbe riscrivere questo esempio Qpid utilizzando logica di contesto primaverile. Qualcuno può aiutarmi?

risposta

1

Spring offre la classe JmsTemplate. Controllare this sito web che ha un esempio di come impostare il modello (con ActiveMQ)

Per esempio specifico provare a sostituire il jmsContainer questo:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
</bean> 

Dovrete anche per cambiare il codice per utilizzare il JmsTemplate primavera:

public class MessageSender { 

    private Destination destination; 
    private JmsTemplate jmsTemplate; 

    public void setJmsTemplate(JmsTemplate jmsTemplate) { 
     this.jmsTemplate = jmsTemplate; 
    } 

    public void setDestination(Destination destination) { 
     this.destination = destination; 
    } 

    public void sendMessage() { 
     MessageCreator creator = new MessageCreator() { 
      public Message createMessage(Session session) { 
       TextMessage message = null; 
       try { 
        message = session.createTextMessage(); 
        message.setStringProperty("text", "Hello, World!"); 
       } 
       catch (JMSException e) { 
        e.printStackTrace(); 
       } 
       return message; 
      } 
     }; 
    jmsTemplate.send(destination, creator); 
    } 
} 

C'è anche una buona documentazione sul sito SpringSource per this

+0

Così rry Non ho potuto configurare correttamente l'appcontext di primavera puoi postare altre bean di configurazione per il tuo esempio non deve essere per il mio quindi posso solo vedere il campione quindi implementarlo nel mio – London