Distributed topic - JMS adapter consuming duplicate messages

We have distributed topic thats consumed by a composite (JMSadpter in mediator).
We see for every one message sent the composite consumes the message twice. (With forwarding policy set to partitioned)
Is this an expected behavior? and how do we make the consumer (JMS adapter) consume only once per message
Thanks
Vijay

From the documentation (provided here: http://download.oracle.com/docs/cd/E21764_01/integration.1111/e10231/adptr_jms.htm)
The JMS API specifies three types of acknowledgments that can be sent by the JMS publisher:
- DUPS_OK_ACKNOWLEDGE, for consumers that are not concerned about duplicate messages
- AUTO_ACKNOWLEDGE, in which the session automatically acknowledges the receipt of a message
- CLIENT_ACKNOWLEDGE, in which the client acknowledges the message by calling the message's acknowledge method
Could you check in the weblogic-ra.xml what acknowledge mode has been configured:
<property>
    <name>AcknowledgeMode</name>
    <value>AUTO_ACKNOWLEDGE</value>
</property>
...Note that when DUPS_OK_ACKNOWLEDGE is used it can happen that a message is consumed more than once.
Are you also sure that the message is not produced twice?
Seminar on Cloud Computing - http://middlewaremagic.com/weblogic/?p=7387

Similar Messages

  • Setting ClientID in JMS Adapter- Consume

    Hi All,
    does anyone have idea how to set clientId in JMS Adapter (Consume Operation). I am able to see only option to set durablesusriber name.
    I can see clientId option available in connection factory setting, but i am still unable to use that. If i have 10 clients , i can't go on creating 10 different connection factory. Also how to link it with 10 adapters?
    I am using JMS topic. SOA 11G
    thanks
    Bikash

    atheek1 wrote:
    You can set client ID either in the JMS connection factory or in FactoryProperties in JMS Adaptors outbound connection pool as <FactoryProperties>ClientID=uniquename</FactoryProperties>
    Weblogic jms expects the combo of durable subscription + client ID to be unique across the durable subscriptions, not just client ID. so if you can given unique durable subscription names in the jca file you should still be able to use the same JMS CF / jms adaptor connection pool across multiple instances.
    Below  is details
    Susriber Name       Client ID_
    DurTpicSus4_1 DurTpicSus4
    DurTpicSus4_2 DurTpicSus4
    DurTpicSus4_3 DurTpicSus4
    then in factory properties i gave ClientID = DurTpicSus4.
    Then deployed all 3 composit application with different susriber name, only one worked. Which ever i deployed first worked everytime. For rest error came, below is error
    ========================================
    JMSMessageConsumer_init: Retrying connection; attempt #2 BINDING.JCA-12133 ERRJMS_JMS_EXCEP. ERRJMS_JMS_EXCEP. Unable to create JMSConnection due to JMSException. Please examine the log file to determine the problem. at oracle.tip.adapter.jms.JMS.JMSConnection.init(JMSConnection.java:263) at oracle.tip.adapter.jms.JMS.JMSConnection.<init>(JMSConnection.java:117) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createConnection(JmsManagedConnectionFactory.java:371) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createDefaultConnection(JmsManagedConnectionFactory.java:364) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createConnection(JmsManagedConnectionFactory.java:327) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createManagedConnection(JmsManagedConnectionFactory.java:95) at weblogic.connector.security.layer.AdapterLayer.createManagedConnection(AdapterLayer.java:803) at weblogic.connector.outbound.ConnectionFactory.createResource(ConnectionFactory.java:91) at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1193) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:395) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:332) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:315) at weblogic.connector.outbound.ConnectionPool.reserveResource(ConnectionPool.java:620) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:309) at weblogic.connector.outbound.ConnectionManagerImpl.getConnectionInfo(ConnectionManagerImpl.java:365) at weblogic.connector.outbound.ConnectionManagerImpl.getConnection(ConnectionManagerImpl.java:320) at weblogic.connector.outbound.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:129) at oracle.tip.adapter.jms.JmsConnectionFactory.getConnection(JmsConnectionFactory.java:93) at oracle.tip.adapter.jms.JMS.JMSMessageConsumer.createConsumer(JMSMessageConsumer.java:318) at oracle.tip.adapter.jms.JMS.JMSMessageConsumer.init(JMSMessageConsumer.java:913) at oracle.tip.adapter.jms.inbound.JmsConsumer.init(JmsConsumer.java:862) at oracle.tip.adapter.jms.JmsEndpoint.run(JmsEndpoint.java:163) at oracle.integration.platform.blocks.executor.WorkManagerExecutor$1.run(WorkManagerExecutor.java:105) at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:183) at weblogic.work.DaemonWorkThread.run(DaemonWorkThread.java:30) Caused By: weblogic.jms.common.InvalidClientIDException: Client id, DurTpicSus4, is in use. The reason for rejection is "The JNDI name weblogic.jms.connection.clientid.DurTpicSus4 was found, and was bound to an object of type weblogic.jms.frontend.FEClientIDSingularAggregatable : FEClientIDSingularAggregatable(SingularAggregatable(<4161256989713352509.1>:150):DurTpicSus4)" at weblogic.jms.frontend.FEConnection.setConnectionClientId(FEConnection.java:1247) at weblogic.jms.frontend.FEConnection.<init>(FEConnection.java:197) at weblogic.jms.frontend.FEConnectionFactory$1.run(FEConnectionFactory.java:381) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.jms.frontend.FEConnectionFactory.connectionCreateInternal(FEConnectionFactory.java:377) at weblogic.jms.frontend.FEConnectionFactoryImpl.connectionCreateInternal(FEConnectionFactoryImpl.java:79) at weblogic.jms.frontend.FEConnectionFactoryImpl.connectionCreateRequest(FEConnectionFactoryImpl.java:62) at weblogic.jms.client.JMSConnectionFactory.setupJMSConnection(JMSConnectionFactory.java:224) at weblogic.jms.client.JMSConnectionFactory.createConnectionInternal(JMSConnectionFactory.java:285) at weblogic.jms.client.JMSConnectionFactory.createTopicConnection(JMSConnectionFactory.java:186) at oracle.tip.adapter.jms.JMS.JMSConnection.init(JMSConnection.java:159) at oracle.tip.adapter.jms.JMS.JMSConnection.<init>(JMSConnection.java:118) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createConnection(JmsManagedConnectionFactory.java:371) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createDefaultConnection(JmsManagedConnectionFactory.java:364) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createConnection(JmsManagedConnectionFactory.java:327) at oracle.tip.adapter.jms.JmsManagedConnectionFactory.createManagedConnection(JmsManagedConnectionFactory.java:95) at weblogic.connector.security.layer.AdapterLayer.createManagedConnection(AdapterLayer.java:803) at weblogic.connector.outbound.ConnectionFactory.createResource(ConnectionFactory.java:91) at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1193) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:395) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:332) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:315) at weblogic.connector.outbound.ConnectionPool.reserveResource(ConnectionPool.java:620) at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:309) at weblogic.connector.outbound.ConnectionManagerImpl.getConnectionInfo(ConnectionManagerImpl.java:365) at weblogic.connector.outbound.ConnectionManagerImpl.getConnection(ConnectionManagerImpl.java:320) at weblogic.connector.outbound.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:129) at oracle.tip.adapter.jms.JmsConnectionFactory.getConnection(JmsConnectionFactory.java:93) at oracle.tip.adapter.jms.JMS.JMSMessageConsumer.createConsumer(JMSMessageConsumer.java:318) at oracle.tip.adapter.jms.JMS.JMSMessageConsumer.init(JMSMessageConsumer.java:914) at oracle.tip.adapter.jms.inbound.JmsConsumer.init(JmsConsumer.java:864) at oracle.tip.adapter.jms.JmsEndpoint.run(JmsEndpoint.java:163) at oracle.integration.platform.blocks.executor.WorkManagerExecutor$1.run(WorkManagerExecutor.java:106) at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:183) at weblogic.work.DaemonWorkThread.run(DaemonWorkThread.java:30)
    ====================================

  • JMS Adapter Supports below message

    Hi Frnds,
    I am working on one scenario i have to read and write RFH2 Message from MQ,we decided to use jms adapter.
    JMS Adapter supports below Message to put in MQ,
    <Data>
         <MQRFH2>
              <usr>
                   <TransactionType>GL_Update</TransactionType>
                   <Environment>LIVE</Environment>
                   <SourceScheme>EANCM</SourceScheme>
                   <SourceApplicationId>5051150003606</SourceApplicationId>
                   <DestScheme>EANCM</DestScheme>
                   <DestinationRouting>5051150003330</DestinationRouting>
                   <OriginalRouting/>
                   <MessageRecordCount>1</MessageRecordCount>
                   <BusinessTransactionId>20090405193001</BusinessTransactionId>
                   <ParentBusTID/>
                   <ParentBusId/>
                   <EECode>Y</EECode>
              </usr>
              <mcd>
                   <Msd>xml</Msd>
              </mcd>
         </MQRFH2>
         <Message>
              <GL_Update>
                   <header>
                        <SourceEAN>5051150003606</SourceEAN>
                        <DestinationEAN>5051150003330</DestinationEAN>
                   </header>
                   <detail>
                        <AuthorisedUser/>
                        <HeaderText/>
                        <HeaderReference/>
                        <PostingItem>
                             <ProfitCentre>7027101000</ProfitCentre>
                             <CostCentre/>
                             <AccountCode>0001413150</AccountCode>
                             <GlobalBusinessIdentifier>AU10</GlobalBusinessIdentifier>
                             <MonetaryAmount>0000000100.00</MonetaryAmount>
                             <GlobalCurrencyCode>AUD</GlobalCurrencyCode>
                             <RunDate>20080725</RunDate>
                             <Description>IV006270M000000000000000000001</Description>
                             <WorkBreakdownStructureElement/>
                             <BudgetRequest/>
                             <TransactionType/>
                             <TransactionNumber/>
                             <PostingKey>50</PostingKey>
                             <SalesTax>
                                  <SalesTaxCode/>
                                  <SalesTaxAmount/>
                             </SalesTax>
                             <PersonnelNumber/>
                             <Assignment/>
                             <CalculateTaxBase/>
                             <BaselineDate/>
                             <PaymentTerms/>
                             <MedicalReference/>
                        </PostingItem>
                        <PostingItem>
                             <ProfitCentre/>
                             <CostCentre/>
                             <SalesTax>
                                  <SalesTaxCode>P3</SalesTaxCode>
                             </SalesTax>
                        </PostingItem>
                        <PostingItem>
                             <ProfitCentre>7022001001</ProfitCentre>
                             <CostCentre/>
                             <AccountCode>0001701001</AccountCode>
                        </PostingItem>
                   </detail>
                   <trailer>
                        <thisDocumentGenerationDateTime>20090405T072928Z</thisDocumentGenerationDateTime>
                        <thisDocumentIdentifier>20090405T072928Z</thisDocumentIdentifier>
                   </trailer>
              </GL_Update>
         </Message>
    </Data>
    please help me on this
    it possible to achieve using JMS adapter or not?? what is the alternative solution ??
    Regards,
    raj

    Hi RSR,
    JMS is the better way to connect sonic MQ.below iam attaching you few points while using JMS.
    1.for the JMS adapter an external driver is needed (java archive)
    2.this archive is provided by the respective provider of the queuing system
    3.the driver has to be deployed via SDM , see XI configuration guide for details
    4.Routing rules and sender has to be specified as for any other channel in the directory
        object model
    5.the message header information is determined from the appropriate sender
       agreement for the communication channel
    6.the communication channel defined must be used in exactly one sender agreement
    7.at least the interface name and the sender service must be qualified in the
        sender agreement ,other fields are optional 
    Depending on the transport protocol selected, specify the following :
    8.For Sonic MQ JMS Provider :
    ·        Java class QueueConnectionFactory
    ·        Java class queue
    ·        IP address or server name
    ·        Server port
    ·        JMS queue
    9.JNDI JMS Provider Lookup
    ·        JNDI name of QueueConnectionFactory
    ·        JNDI name of JMS queue
    ·        Name of JNDI Initial Context Factory
    ·        Address of JNDI server
    ·        JNDI users
    ·        JNDI password with confirmation
    10.
    For WebSphereMQ (MQ Series) JMS Provider
    ·        Java class QueueConnectionFactory
    ·        Java class queue
    ·        IP address or server name
    ·        Queue manager name
    ·        Channel name
    ·        JMS queue
    ·        Character set for non-ASCll names
    ·        Transport/network protocol
    ·        Target client
    11.
    JMS Provider Administered Objects via File
       File name of serialized object QueueConnectionFactory
       File name of serialized object Queue
    With Rgds,
    MF.Haq

  • MDB,MDB container or JMS adapter stops processing messages from JMS queue

    Hi guys,
    we have created a component using Enterprise Java Beans, let's say a product catalog, deployed it on a Glassfish v2 instance, and connected it to a legacy system using JMS and Sun MQ v4.1 as messaging system. The catalog component thus starts one MDB that listens on a JMS queue, let's say a queue named catalog_business_events_in, and waits for incoming messages, i.e. in our case update events. The problem is, that in general this approach works well, but sometimes the MDBs/JMS adapter stops for some reason fetching and processing messages from the JMS queue. We don't know why - no exceptions, etc.. Seems to be a Glassfish EJB container, JMS adapter or Sun MQ configuration issue. It seems to be that our component is not the problem.
    The messages are compressed/uncompressed by Sun MQ automatically. We actually have 2 Sun MQ instances in clustered mode running to have some kind of failover - no HA cluster, yet. Sun MQ instances are accessed from Glassfish instances running in different Glassfish clusters - so we have a dedicated Sun MQ cluster not a Sun MQ instance per Glassfish instance. Each Glassfish instance is configured such that it knows both Sun MQ instances to allow automatic failover.
    Has someone an idea, why the MDBs/ MDB container/ JMS adapter - stops processing messages? We are kind of puzzled as it happens more often now and apparently when traffic is (very) low not high!
    Thanks for your help.
    Cheers,
    Martin
    Edited by: east1979 on Jan 13, 2009 8:06 AM

    Hi Manoj,
    I have a very similar if not identical issue,
    Error while running realtime jobs that read from JMS tables via JMS MQ adapter:
    15/11/12 09:10:08  JMS GET OPERATION ERROR : TIMEOUT.UNABLE TO RECEIVE RESPONSE FROM THE INVOKED DATA SERVICES SERVICE.ADAPTER OPERA
    TION TO CONTINUE.
    15/11/12 09:10:15  Communication Error. See real time job log for details.
    Dump available:
    https://sapmats.wdf.sap.corp/download/download.cgi?id=5C0KZAHA3RSXBJW3ABLMUUT2P5UUKWO2TM3EJDM5W2HGDZUDID
    Version of DS:14.0.3.273
    Any comments?
    Thansk and kind Regards,
    Kenneth

  • Jms adapter not polling messages from jms topic

    Hi
    We have a jms adapter configured in BPEL process which need to poll messages from JMS topic.Unfortunately its not polling message from JMS Topic if we add Message Selector and Durable Subscriber properties in jca file.Please find jca file content below
    <adapter-config name="SyncCustomerPartyListCDHJMSConsumer" adapter="JMS Adapter" wsdlLocation="oramds:/apps/AIAMetaData/AIAComponents/ApplicationConnectorServiceLibrary/CDH/V1/ProviderABCS/SyncCustomerPartyListCDHProvABCSImpl.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
      <connection-factory location="eis/jms/aia/syncCustomerParty_cf" UIJmsProvider="WLSJMS" UIConnectionName="Dev"/>
      <endpoint-activation portType="Consume_Message_ptt" operation="Consume_Message">
        <activation-spec className="oracle.tip.adapter.jms.inbound.JmsConsumeActivationSpec">
          <!--property name="DurableSubscriber" value="XYZ"/-->
          <property name="PayloadType" value="TextMessage"/>
          <!--property name="MessageSelector" value="Target in ('XYZ')"/-->
          <property name="UseMessageListener" value="true"/>
          <property name="DestinationName" value="jms/aia/Topic.jms.COMMON.CustomerParty.PUBLISH"/>
        </activation-spec>
      </endpoint-activation>
    </adapter-config>
    If we remove Durable subscriber and message selector properties,its able to poll messages.
    Any pointer will help
    thanks in advance
    Baji

    After changing below property in jca file.JMS adapter is able to poll messages from JMS Topic.
    <property name="UseMessageListener" value="false"/>
    But if i un comment below line and deploy my code again, it stop pulling the messages from topic.
    <property name="DurableSubscriber" value="XYZ"/>
    If i bounce the server after above change and deployment ,it will start polling the message.I am not sure why i need to restart my server after adding above property.
    Thanks
    Baji

  • JMS Adapter - Consuming empty opaque element

    Hi All,
    In a BPEL(lets say BPEL A) using JMS Adapter I am posting an message/payload into JMS Topic as Opaque element using produce_message.
    Now in another router(Bpel B) I am listening to this topic using consume_message and trying to retrive the message.
    Problem : In the consuming side ie., BPEL B's receive I receive the message as Empty opaque element.
    ie.,
    <receiveEBMFromIntegrationTopic_InputVar>
    <part name="opaque">
    <opaqueElement/>
    </part>
    </receiveEBMFromIntegrationTopic_InputVar>
    Although in BPEL A the message that I have invoked produce_message on JMSAdapter is this :
    <PublishEBMToTopic_Produce_Message_InputVar>
    <part name="opaque">
    <opaqueElement>
    <ns2:HeaderMsg>
    <ns2:MessageID>PIMS-2012-06-22T13:12:13+05:30</ns2:MessageID>
    <ns2:MessageDate>2012-06-22T13:12:13+05:30</ns2:MessageDate>
    <ns2:MessageVersion>V2</ns2:MessageVersion>
    <ns2:MessagePriority>4</ns2:MessagePriority>
    <ns2:MessageDomain>GPRD</ns2:MessageDomain>
    <ns2:MessageRetryCount>0</ns2:MessageRetryCount>
    <ns2:CorrelationID>PIMS-2012-06-22T13:12:13+05:30</ns2:CorrelationID>
    <ns2:SourceSystemName>PIMS</ns2:SourceSystemName>
    <ns2:SystemEnvironmentCode>Dev</ns2:SystemEnvironmentCode>
    <ns2:BOName>Clinical Study</ns2:BOName>
    <ns2:BOOperation>Sync</ns2:BOOperation>
    <ns2:DownGradeVersionFlag>N</ns2:DownGradeVersionFlag>
    </ns2:HeaderMsg>
    <ns2:BodyMsg>
    <ns2:ClinicalStudyEBO>
    <ns2:StudyNumber>M13-3201</ns2:StudyNumber>
    <ns2:ProtocolTitle>XYZ</ns2:ProtocolTitle>
    <ns2:ABORecordInfo>
    <ns2:LastSourcedFrom>PIMS</ns2:LastSourcedFrom>
    <ns2:LastSourcedModifiedDate>2012-06-11T00:00:00.000+05:30</ns2:LastSourcedModifiedDate>
    </ns2:ABORecordInfo>
    </ns2:ClinicalStudyEBO>
    </ns2:BodyMsg>
    </opaqueElement>
    </part>
    </PublishEBMToTopic_Produce_Message_InputVar>
    Can someone help me in knowing why I am getting an empty element in receivving side . Thanks for helping!
    Regards,
    Sridhar.

    Hi Sridhar,
    First thing To do is certify that the published message is ok in the JMS topic.
    You can check that in the Weblogic Admin Console, you will need a durable subscriber to be able to check messages in a topic, or change temporarily to a queue that is easier to check the messages that are in.
    Cheers,
    Vlad

  • Jms Adapter Consume and produce

    Hai guys,
    i don't know anything in soa. i have got a usecase which is to
    1) Read a .csv file
    2) Send it to a bpel (in bpel do nothing to payload). Again i have to send the payload to jms adapter( which i dnt knw how )
    3) From the same jms adapter passing the payload to mediator
    4) Pass the input to another jms( jms2 ). from jms2 pass the payload to another bpel
    5) from bpel to db adapter
    am using
    Oracle jDevloper 11.1.13
    Weblogic server is a 10.3.6
    my problem is how to create the same jms in two ways like consuming and producing
    Thanks in advance
    Edited by: Beckyard on Sep 26, 2012 9:49 PM

    Hi,
    Why do you need 2 JMS queues? Can't you consider following pattern?
    Read .csv --> BPEL --> JMS Q
    JMS Q --> Mediator --> BPEL (only if some payload processing required) --> Db Adapter
    Assuming the above pattern, you'll have to develop 2 processes (in your pattern 3 processes).
    - One that will enqueue the data in JMS in which the JMS Adapter will be placed in the External references and will be invoked with Produce operation.
    - Another process in which Mediator will consume the message using Consume operation from JMS and pass it to BPEL for inserting into database. In this case, JMS Adapter will be placed in Exposed Service swim-lane.
    Let us know how you proceed.
    Regards,
    Neeraj Sehgal

  • Standalone (J2SE) adapter - axis SOAP adapter - issue duplicate messages

    All,
    Perhaps you can help me. I've setup a scenario where an standalone (J2SE) adapter sends a file to SAP XI channel, configured on the central adapter engine, of type SOAP configured to use Axis servlet.
    The connection is setup and the standalone adapter channel logs thre response from the SOAP channel which reads HTTP error 500, indicating a duplicate message.
    SAP has identified this problem and proposes in the FAQ for Axis (note 1039369) to set on the SOAP channel module CallSapAdapter property ignoreDuplicate to true in the module processor.
    I've implemented this as suggested however found the problem persists. I'm still receiving an HTTP 500 error.
    Your help is much appreciated solving this problem.
    Thanks
    Harald

    As there was a bugfix recently, make sure that you have installed the latest patch.
    If this does not work, open an OSS ticket for this issue.
    Stefan

  • Restrict message volume through JMS adapter (not individual message size)

    Hi, does anyone know of a way to restrict the flow of messages through a JMS adapter? For example, If I wanted to only allow up to 1000 messages to be sent in an hour to a particular system. The rest should just be queued in the Adapter Engine until the next hour begins in order to smooth out the load on the recieving system.
    I know this is poor design but there is a system that is getting overwhelmed and cannot be easily changed right away. I'd like a way to control this from the middleware using standard PI (no ccBPM).
    Any ideas?
    Thanks in advance,
    Aaron

    Stefan, thank you for the idea, that is a good one.
    I'm going to assume there is nothing specific we can do in the SAP JMS adapter to control the flow, and look to a solution in the queueing software like you suggested or the 3rd party application.
    -Aaron

  • JMS adapter with complex messages

    Each of our MQ Series messages contain several transactions.  Our standard format is:
    <Message>
    <RecordSet(1..n)>
    HeaderRecord
    Item Record(1..n)
    </RecordSet>
    </Message>
    Does anyone have an example for how this would be done in XI 3.0?  I have seen how this can be done with the file adapter, but with the JMS adapter do I need to use BPM? 
    Thanks,
    Andrew

    Each of our MQ Series messages contain several transactions.  Our standard format is:
    <Message>
    <RecordSet(1..n)>
    HeaderRecord
    Item Record(1..n)
    </RecordSet>
    </Message>
    Does anyone have an example for how this would be done in XI 3.0?  I have seen how this can be done with the file adapter, but with the JMS adapter do I need to use BPM? 
    Thanks,
    Andrew

  • Oracle JMS Adapter - Bpel Pick message from AQ based on the correlationId?

    Hello,
    I'm experiencing an issue during pricking the messages from AQ based on the JMSCorrelationID in Asynchronously.
    I've developed asynchronous BPEL services, which will post messages in AQ (Inbound), the same service will liston response from Out queue.
    Currently my service is consuming all messages, i want to consume only relevant response message based on the correlation Id.
    Could you please advise me?
    Regards,
    Paddy.

    Thanks MaShek for your replay,
    During process invocation I've generated guid and set this value to JMSCorrelationID property which will set as message corrlationID, same JMSCorrelationID coming in response as well, I've set on message property same JMSCorrelationID which I set in invocation.
    If same message response comes then the pick activity is working fine that means consumed message and correlation correctly, but other messages also consuming and then rejecting message. I want to restrict this.
    Only relevant correlationid messages need to pick and process.
    If any suggestions appreciated.
    Note: I'm using Jdev11.1.15,
    Regards,
    Paddy

  • Mediator Resequencer,JMS Adapter: queue consumers increase from PS2 to PS4

    Hi,
    We have an environment using SOA Suite and Mediator Resequencer, it is using a FIFO approach. It has been running fine in SOA Suite version 11.1.1.3.
    We are using a JMS Adapter, consuming the messages from the UDD queues as we have a SOA cluster of two managed servers.
    Well we are now doing some test for upgrading to PS4 (11.1.15) and we have noticed some differences after the upgrade in terms of # consumers on the UDD queues.
    In 11.1.1.3 eache member of the UDD was showing just 1 consumer. Looks like this is the right configuration when using and mediator resequencer FIFO approach, as they say you need to have a single-threaded approach to avoid unpredictible result.
    After upgrade that, we have noticed that in 11.1.1.5 each UDD member shows 2 consumers, we have not changed anything, we just follow the upgrade guide to do that. To be honest we are not sure wheter it is a problem or not.
    Can anybody advise about that? If it is an issue, How and where can configure it to get back to 1 consumer connected to UDD member?
    Thanks a lot!

    The Bridge is configured to use the MQ CF and destination directly without the foreign JMS wrapper. Does this make any difference to the bridge's transactional behaviour with MQ?
    Even with the foreign jms wrapper, the local jndi name of the MQ CF is still mapped to com.ibm.mq.jms.MQXAQueueConnectionFactory class. So I think there is no wrapper classes are used from foreign JMS perspective. But if a bridge is configured to lookup local jndi, does it add any wrapper classes which handles the XA interactions with MQ in a different way ?
    I am trying to see if introducing a foreign server resolves the problem. Not sure if its worth to take this path.
    Thanks in advance.
    Regards,
    Atheek

  • JMS Durable Distributed Topics

              Please forgive my ignorance if I am doing something silly. I am new to Weblogic
              and JMS, but learning a lot quickly. Any help will be greatly appreciated.
              I am running weblogic 8.1 with no service packs in a development environment only.
              We are trying to work out what is the expected behaviour for our current JMS Topic
              framework.
              I have a two server cluster with distributed topics configured. The two topics
              are configured to be durable. I have a test which generates about 100 events for
              test purposes. Under normal circumstances, each server processes about 50 messages.
              (Load balancing!)
              When the test is running, I kill one of the servers manually before it finishes.
              (Not a gracefull shutdown). The killed server processes about 20 messages, and
              the running server processes about 50. I can see that tables for the persistent
              topics have something (I don't know what) representing about all 100 events sent.
              When I bring the killed server back up, nothing happens. I would expect, from
              the documentation that I read, that the remaining 30 or so events will be put
              on the topic to be processed by our MDBs.
              Why don't all the events get placed on the topic of the killed server when it
              starts back up?
              What is the expected behaviour here?
              Is something wrong with my topic setup?
              Thanks in advance for any help...
              regards,
              Patrick Parato
              

    Hi Patrick,
              Note 1: If you desire MDB to be transactional. Make sure
              the assembly descriptor in ejb-jar.xml is set to
              "Required" in addition to making the transaction-type
              "Container" as you have already done.
              <assembly-descriptor>
              <container-transaction>
              <method>
              <ejb-name>YOUREJBNAME</ejb-name>
              <method-name>onMessage()</method-name>
              </method>
              <trans-attribute>Required</trans-attribute>
              </container-transaction>
              </assembly-descriptor>
              Note 2: Your MDB is non-durable. It needs to be durable
              to cause messages to persist. Add the following line
              in the message-driven-destination clause of your ejb-jar.xml:
              <subscription-durability>Durable</subscription-durability>
              See the JMS FAQ on dev2dev.bea.com (or the JMS Performance
              Guide white-paper) for information on how to make
              sure a message is persistent.
              Note 3: Only one durable subscriber MDB will
              be able to attach to a given durable subscription, MDB's
              on other servers won't be able to, so even if the MDB
              is targeted at the cluster only one MDB will be able
              to process messages. This is the nature
              of durable subscriptions. I'm attaching some personal
              notes on the subject.
              Note 4: Durable subscriptions must refer to
              the JNDI name of member destinations, not to
              the distributed destination. WL does not support
              durable subscriptions directly on a distributed topic.
              Note 5: If you do not want message replication I'm not
              sure why you are using a distributed topic. Use a
              distributed queue.
              Tom
              Patrick Parato wrote:
              > Tom,
              >
              > Thanks for the quick reply.
              >
              > The first thing I want to clarify is that we only have one subscriber (MDB) that
              > is deployed once across multiple servers in a cluster. So this may explain why
              > each server is getting half the messages.
              Its still not clear. Each MDB pool should get each message.
              The individual
              instances in the pool will divide the messages sent to their MDB
              pool's subscription among them.
              >
              >
              >>2) Make sure that you are using durable subscribers. I suspect you
              >>are not. Note that durable subscribers are not supported
              >>for distributed destinations - they must refer directly to a member
              >>destination instead.
              >>
              >
              >
              > We are definitely using a distributed topic. The entry for our MDB in the weblogic-ejb.jar.xml
              > for the <destination-jndi-name> refers to the jndi name of the distributed topic.
              > So if I understand you correctly you are saying that the <destination-jndi-name>
              > should refer to the jndi name of an actual phyiscal topic on one of the servers.
              > By tying an MDB to a regular topic, how do we achieve failover if the JMS server
              > that the topic is associated with should fail?
              >
              >
              >
              > Here is a snippet of our config.xml:
              > (Names have been changed for security reasons)
              >
              > <JMSServer Name="JMS Server1" Store="Event Store1" Targets="myserver1">
              > <JMSTopic CreationTime="1065029382062"
              > JNDIName="distributed.topic@JMS Server1"
              > JNDINameReplicated="false"
              > Name="Distributed Topic@JMS Server1"
              > Template="Distributed Topic" TimeToDeliverOverride="5000"/>
              > </JMSServer>
              >
              > <JMSServer Name="JMS Server2" Store="Event Store2" Targets="myserver2">
              > <JMSTopic CreationTime="1065029382375"
              > JNDIName="distributed.topic@JMS Server2"
              > JNDINameReplicated="false"
              > Name="Distributed Topic@JMS Server2"
              > Template="Distributed Topic" TimeToDeliverOverride="5000"/>
              > </JMSServer>
              >
              >
              > <JMSDistributedTopic JNDIName="distributed.topic" Name="Distributed Topic" Targets="Cluster">
              > <JMSTemplate DeliveryModeOverride="Persistent"
              > Name="Distributed Topic" TimeToDeliverOverride="5000"/>
              > <JMSDistributedTopicMember
              > JMSTopic="distributed.topic@JMS Server1" Name="Distributed Topic@JMS
              > Server1"/>
              > <JMSDistributedTopicMember
              > JMSTopic="distributed.topic@JMS Server2" Name="Distributed Topic@JMS
              > Server2"/>
              > </JMSDistributedTopic>
              >
              >
              > ejb-jar.xml:
              >
              > <message-driven>
              >      <ejb-name>AnMDB</ejb-name>
              >      <ejb-class>package.AnMDB</ejb-class>
              >      <transaction-type>Container</transaction-type>
              >      <message-driven-destination>
              >           <destination-type>
              >                javax.jms.Topic
              >           </destination-type>
              >      </message-driven-destination>
              > </message-driven>
              >
              > weblogic-ejb.jar.xml:
              >
              > <weblogic-enterprise-bean>
              > <ejb-name>AnMDB</ejb-name>
              >      <message-driven-descriptor>
              >      <destination-jndi-name>distributed.topic</destination-jndi-name>
              >      </message-driven-descriptor>
              >      <enable-call-by-reference>True</enable-call-by-reference>
              >      <jndi-name>ejb.AnMDB</jndi-name>
              > </weblogic-enterprise-bean>
              >
              > Thanks for you help and quick reply.
              >
              > regards,
              > Patrick Parato
              >
              A durable topic subscriber MDB uses its name to generate its client-id.
              Since JMS enforces uniqueness on this client-id, this means that if a durable
              subscriber MDB is deployed to multiple servers only one server will be able
              to connect. Some applications want a different behavior where
              each MDB pool on each server gets its own durable subscription.
              The MDB durable subscription id, which must be unique on its topic, comes from:
              1) <jms-client-id>MyClientID</jms-client-id>
              (the weblogic dtd)
              2) if (1) is not set then the client-id
              comes from the ejb name.
              The durable subscription is uniquely identified within a cluster by a
              combination of "connection-id" and "subscription-id". Only one active
              connection may use a particular "connection-id" within a WebLogic cluster.
              The connection id comes from:
              1) The "ClientId" attribute configured on the WebLogic connection factory.
              This defaults to null. Note that if the ClientId is set on a connection
              factory, only one connection created by the factory
              may be active at a time.
              2) If (1) is not set, then, as with the subscriber-id,
              the connection-id is derived from jms-client-id descriptor attribute:
              <jms-client-id>MyClientID</jms-client-id>
              (the weblogic dtd)
              3) If (1) and (2) are not set, then, as with the subscriber-id,
              the connection-id is derived from the ejb name.
              Work-around:
              A) Create a custom connection-factory for each server:
              1) configure "JNDIName" to the same value across all servers
              ("myMDBCF" in this example)
              2) configure "ClientId" to a unique value per server
              3) enable "UserTransactionsEnabled"
              4) enable "XAConnectionFactoryEnabled"
              5) set "AcknowledgePolicy" to "ACKNOWLEDGE_PREVIOUS"
              6) target the CF at a single WebLogic server
              (Number 5 is required for non-transactional topic MDBs)
              B) In the MDB's weblogic-ejb-jar.xml descriptor, set the MDB's connection
              factory to the JNDI name of the custom connection factories configured in
              (A). Optionally, also specify the subscriber-id via the jms-client-id
              attribute.
              <weblogic-ejb-jar>
              <weblogic-enterprise-bean>
              <ejb-name>exampleBean</ejb-name>
              <message-driven-descriptor>
              <connection-factory-jndi-name>myMDBCF</connection-factory-jndi-name>
              <jms-client-id>myClientID</jms-client-id>
              </message-driven-descriptor>
              </weblogic-enterprise-bean>
              </weblogic-ejb-jar>
              C) Target the application at the same servers that have the custom connection
              factories targeted at them.
              Notes/Limitations:
              1) If the MDB is moved from one server to another, the MDB's corresponding
              connection-factory must be moved with it.
              2) This work-around will not work if the destination is not in the same
              cluster as the MDB. (The MDB can not use the local connection factory, which
              contains the connection-id, as connection factories do not work unless they
              are in the same cluster as the destination.)
              3) This work-around will not work for non-WebLogic JMS topics.
              

  • Confirmation that all topic subscribers have consumed message

    Is it possible to intercept an event that is produced when all topic subscribers have consumed a message?
    I am designing a messaging model where three different sub-systems subscribe to a topic. I need to do some processing once they have all consumed a message posted to the topic. Is this possible? I can not find any documentation on how to achieve this.
    Thanks
    Rich

    Thanks for your response. I don't think the JMS spec does provide a way to do this. The message broker has to track this, since it is managing subscriptions. If you set up a subscription as durable, the broker will keep a topic message around until a durable subscriber comes back online.
    We are using ApacheMQ which allows you to implement some extended integration patterns using Apache Camel. I think I can use it to do something similar to your suggestion to verify receipts.
    Thanks again for you time.

  • Processing messages from MQ by JMS adapter

    Hi,
    I have a JMS adapter which reads messages from MQ and invokes a real time service.
    I am facing a problem.
    Suppose after processing my 3rd message fails , i get the error
    com.acta.adapter.sdk.RecoverableOperationAdapterException: JMS GET OPERATION ERROR : TIMEOUT.UNABLE TO RECEIVE RESPONSE FROM THE INVOKED DATA SERVICES SERVICE.ADAPTER OPERATION TO CONTINUE.
    Now ideally the error messages should go into an error queue and the remaining messages should be processed.
    But the remaining messages are also not getting processed.All subsequent  messages after erroneous message also get into error q.
    I have set continue after error property(In operations configuration) to True.
    I am using Get operation for JMS adapter.
    Any idea what could solve this issue?

    Hi Manoj,
    I have a very similar if not identical issue,
    Error while running realtime jobs that read from JMS tables via JMS MQ adapter:
    15/11/12 09:10:08  JMS GET OPERATION ERROR : TIMEOUT.UNABLE TO RECEIVE RESPONSE FROM THE INVOKED DATA SERVICES SERVICE.ADAPTER OPERA
    TION TO CONTINUE.
    15/11/12 09:10:15  Communication Error. See real time job log for details.
    Dump available:
    https://sapmats.wdf.sap.corp/download/download.cgi?id=5C0KZAHA3RSXBJW3ABLMUUT2P5UUKWO2TM3EJDM5W2HGDZUDID
    Version of DS:14.0.3.273
    Any comments?
    Thansk and kind Regards,
    Kenneth

Maybe you are looking for

  • In processFormRequest update a DFF value on the page

        I am currenly working with the customer standard application with the 'new customer page' (ArCreCusPG) and I have extended the main controller for the page (ArCreCusCO) so that I may update a field on the screen based off a user's input elsewhere

  • IPod Nano (3rd gen.) will sync but music is not uploaded

    I previosuly wanted to format my iPod with Disk Utility (since it would not mount on iTunes) and a very knowledgable person on this site assisted me - now when I connect the iPod to iTunes, it appears as a device!!  But... I want to sync only a few i

  • Why won't my web page (for banks) not load?

    When I use internet explorer for banks i am getting a security certificate error. In firefox 3.6.15 the web page is blank. i have reset my explorer security settings to ignore certificate verification but this has not helped. any advice?

  • Can't get songs on to ipod

    I have a lot of songs on the ipod. Today I went to put more on. I am not good with computers so please be simple with your answers. I plugged in the ipod and it did not put on to it my new songs. Why? I figured I would go to the ipod updater and see

  • Make Effects 'Stick' to Continuously Rasterized Layers/Typed Text?

    I want to apply an effect (specifically a Ramp) to a Continuously Rasterized layer of typed text but because of the change in render order when you turn on Continuously Rasterize the Ramp doesn't 'stick' to the type as it's moved. I would SWEAR there