camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gershaw, Geoffrey" <geoffrey.gers...@credit-suisse.com>
Subject JMS Endpoint Reuse and sending to different destinations at runtime(Didn't make it to the list 1st time)
Date Wed, 25 Apr 2012 20:57:01 GMT
 

Hello,

 

I am trying to do what the subject of this mail says. I have looked at
the documentation on the JMS component.

 

I have a collection of Publishable objects. Publishable objects have 

 

1.       A method that returns the Topic name postfix. 

2.       A method that returns a Map<String,String> of properties to put
as JMS Headers

 

Based on what I read, I created the below class. I am using the
ProducerTemplate to publish

 

 

public class GenericCamelPublisher {

      private ProducerTemplate jmsProducer;

      private static final Logger log =
Logger.getLogger(GenericCamelPublisher.class);

      private String destinationPrefix;

      private String endPointUri;

 

      public GenericCamelPublisher(ProducerTemplate jmsProducer, String
destinationPrefix, String endPointUri){

            this.jmsProducer = jmsProducer;

            this.destinationPrefix = destinationPrefix;

            this.endPointUri = endPointUri;

      }

 

      public void publish(Publishable publishable){

            Map<String,String> origMsgHeaders =
publishable.getPublishProperties();

            Map<String,Object> msgHeaders = new HashMap<String,
Object>(origMsgHeaders);

            String destinationName = null;

 

            if(!StringUtils.isEmpty(destinationPrefix)){

                  destinationName = String.format("%s.%s",
destinationPrefix, publishable.getPublishTopicName());

            }else{

                  destinationName = publishable.getPublishTopicName();

            }

 

            if(log.isDebugEnabled()){

                  log.debug("Destination is " + destinationName);

            }

            msgHeaders.put(JmsConstants.JMS_DESTINATION_NAME,
destinationName);

            jmsProducer.sendBodyAndHeaders(endPointUri,
publishable.getPayload(), msgHeaders);

      }

}

 

I receive the following output

 

15:03:46,115 [QFJ Message Processor] DEBUG
com.csfb.oddlots.creditex.md.GenericCamelPublisher  - Destination is
T.NY.COLT.FBID.REDC.2I65BYCO1

15:03:46,115 [QFJ Message Processor] DEBUG
org.apache.camel.impl.DefaultComponent  - Creating endpoint
uri=[jmsUS://topic], path=[topic], parameters=[{}]

15:03:46,116 [QFJ Message Processor] DEBUG
org.apache.camel.spring.SpringCamelContext  - jmsUS://topic converted to
endpoint: Endpoint[jmsUS://topic] by component:
org.apache.camel.component.jms.JmsComponent@1d281f1

15:03:46,117 [QFJ Message Processor] DEBUG
org.apache.camel.component.jms.JmsProducer  - Starting producer:
Producer[jmsUS://topic]

15:03:46,117 [QFJ Message Processor] DEBUG
org.apache.camel.impl.ProducerCache  - Adding to producer cache with
key: Endpoint[jmsUS://topic] for producer: Producer[jmsUS://topic]

15:03:46,120 [QFJ Message Processor] DEBUG
org.apache.camel.impl.ProducerCache  - >>>> Endpoint[jmsUS://topic]
Exchange[Message:
8=FIXT.1.19=17835=S15=USD22=R48=2I65BYCO155=60200560=20120425-19:03:46.0
51117=15648175132=95134=50000167=INDEX_CDS423=6537=1632=0647=06372=Y7100
=CX7101=UPD7102=156481757528=010=202]

15:03:46,316 [QFJ Message Processor] DEBUG
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate  -
Executing callback on JMS Session:
com.tibco.tibjms.TibjmsxSessionImp@1846149

15:03:46,377 [QFJ Message Processor] WARN
org.apache.camel.processor.UnitOfWorkProcessor  - Caught unhandled
exception while processing ExchangeId:
ID-USD09546426-64302-1335380610999-0-4234

org.springframework.jms.InvalidDestinationException: Not allowed to
create destination; nested exception is
javax.jms.InvalidDestinationException: Not allowed to create destination

                at
org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUt
ils.java:285)

                at
org.springframework.jms.support.JmsAccessor.convertJmsAccessException(Jm
sAccessor.java:168)

                at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)

 

I have seen this exception if I try to publish to a topic that does not
begin with T.NY.COLT. It's a permissioning thing. 

In this case, the logs don't tell where the jmsEndpoint tried to publish
too.

 

Am I approaching this the wrong way?

 

Thanks in advance,


Geoff

 

 

 

Geoffrey A. Gershaw

 


=============================================================================== 
Please access the attached hyperlink for an important electronic communications disclaimer:

http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html 
=============================================================================== 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message