2016-08-08 7 views
1

Der Versuch, die camel/Spring-Konfiguration zu ermitteln, um ApplicationIdData mithilfe von JMS festzulegen.Wie Sie ApplicationIdData mithilfe von MQQueueConnectionFactory festlegen?

ich die Java-Art und Weise wissen, dass es, wie unten zu tun, habe ich MQOO_SET_IDENTITY_CONTEXT unter

int putOptions = MQConstants.MQPMO_SET_IDENTITY_CONTEXT; 
pmo.options =putOptions; 

mit und stellen Sie dann i applicationIdData wie:

MQMessage msg = new MQMessage(); 
msg.applicationIdData = "SomeId"; 
msg.writeString(qmessage); 

queue.put (msg, PMO);

Frage ist, wie setze ich ApplicationIdData mit JMS/camel/Spring Konfiguration. Unten ist meine aktuelle Kamelkonfiguration.

<bean class="org.apache.camel.component.jms.JmsComponent" id="jmsConnection"> 
     <property name="connectionFactory" ref="mqConnectionFactoryWrapper" /> 
     <property name="acknowledgementModeName" value="AUTO_ACKNOWLEDGE" /> 
    </bean> 

    <bean id="connectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> 
     <property name="hostName" value="${HOSTMNAME}" /> 
     <property name="port" value="${PORT}" /> 
     <property name="queueManager" value="${MQ_QMNAME}" /> 
     <property name="channel" value="${MQ_INTERNAL_CHANNEL}" /> 
     <property name="transportType" value="1" /> 

     <!-- Transport type 1 means pure TCP/IP without any local client --> 
    </bean> 

    <bean id="mqConnectionFactoryWrapper" 
     class="org.springframework.jms.connection.CachingConnectionFactory"> 
     <property name="targetConnectionFactory" ref="connectionFactory" /> 
     <property name="sessionCacheSize" value="500" /> 
    </bean> 

    <bean id="jmsTransactionManager" 
     class="org.springframework.jms.connection.JmsTransactionManager"> 
     <property name="connectionFactory" ref="mqConnectionFactoryWrapper" /> 
    </bean> 

    <bean id="PROPAGATION_REQUIRES_NEW" 
class="org.apache.camel.spring.spi.SpringTransactionPolicy"> 
     <property name="transactionManager" ref="jmsTransactionManager" /> 
     <property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW" /> 
    </bean> 

Ich habe durch Verbindungen unten gegangen, hätte nicht die richtige Antwort

http://forum.spring.io/forum/spring-projects/integration/jms/97168-how-to-set-wmqconstants-wmq-mqmd-read-enabled-in-spring

http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.0.1/com.ibm.mq.csqzaw.doc/jm41030_.htm

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032010_.htm

+0

'queue.put (msg, pmo);' Sieht wie eine Erweiterung von JMS aus und ist daher nicht mit der Standard-JMS-API verfügbar - also ist es mit Spring JMS nicht möglich, es sei denn, es gibt eine andere Methode zB über einen Nachrichtenkopf). –

+0

Danke Gary, aber ich denke, dass es einen Weg/Workaround geben sollte. Will weiter versuchen ... –

+0

IBM hat eine Möglichkeit vorgeschlagen, es als Eigenschaft festzulegen und es [IBMs Vorschlag] (http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.0.1/com.ibm.mq.csqzaw .doc/jm41030_.htm) –

Antwort

0

Alles, was ich einen Weg in Kamel Config finden benötigt finden einstellen einige Eigenschaften im Ziel und legen Sie eine Kopfzeile fest. Ich setze Ziel im Header als

< setHeader header = "CamelJmsDestinationName"> Warteschlange: /// Q_Name targetClient = 1 & mdWri teEnabled = true & a mp; mdMessageContext = 1 </setHeader>

Hinweis: Die Einstellung mdWri teEnabled = true gleich

// Enable MQMD write 
    dest.setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED, true); 

Einstellung mdMessageContext = 1 gleich

// Optionally, set a message context if applicable for this MD field 
    dest.setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT, 
    WMQConstants.WMQ_MDCTX_SET_IDENTITY_CONTEXT); 

Dann setzen ApplicationIdData als < setHeader header = "JMS_IBM_MQMD_ApplIdentityData"> BSI_XML_CANADA_ACK BSI_XML_CANADA_ACK </setHeader>

komplette Code:

<route id="ValidateAndAck" streamCache="true"> 
      <from uri="sql:{{ValidateCDMsg}}" /> 
      <setHeader headerName="CamelJmsDestinationName"> <constant>queue:///Q_Name?targetClient=1&amp;mdWriteEnabled=true&amp;mdMessageContext=1</constant></setHeader> 
      <setHeader headerName="mdWriteEnabled"> <simple>true</simple></setHeader> <!-- This may be redundant--> 
      <setHeader headerName="mdMessageContext"> <simple>2</simple></setHeader> <!-- This may be redundant--> 
      <setHeader headerName="JMS_IBM_MQMD_ApplIdentityData" > 
       <simple>APP_ID_NAME</simple> 
      </setHeader> 
      <setHeader headerName="JMS_IBM_MQMD_ApplOriginData" > 
       <simple>APP_ID_NAME</simple> 
      </setHeader> 
      <to uri="bean:ProcessBean?method=setProcessId" /> 

Ich bin nicht sicher, dass JMS_IBM_MQMD_ApplOriginData erforderlich ist.

Verwandte Themen