How to acknowledge JMS messages manually in BPEL

How to acknowledge JMS messages manually in BPEL?
Thanks!

If Oracle BPEL/SOA Dev team is watching this form then please add this feature as all the major vendors support this.

Similar Messages

  • How to read JMS message properties from BPEL or BPMN process

    Hi all,
    I have a JMS Adapter that consumes messages from a remote ActiveMQ queue and I don't find the way the get the properties of the JMS message as I would like to map them in BPEL or BPMN process variable. I only manage to get the content of the message.
    I've also read that if using a MapMessage, one of the map entry can be mapped directly and that the other map entries go to jca.jms.Map.xxxx where xxxx is key of the map entry.
    But how can I map those "jca.jms.Map.xxxx" properties on process variables ? and how to map JMS Properties (that seem to be mapped on jca.jms.JMSProperty.xxxx) to process variables ?
    I use SOA Suite version : 11.1.1.4.0
    Thanks for your help

    SOA Suite 11g - how to set/get JMS headers ?

  • How to count JMS messages count using BPEL

    Hi All,
    Can you please let me know how to count , total numbers of messages while pooling or pushing the messages using BPEL.
    Thanks,
    Srinivas.

    What do you mean by total number of messages? That are dequeued by BPEL? Or that are in the queue?
    Is the BPEL process started if a message is dequeued? In that case you could just count the number of BPEL instances...
    Kind regards Lonneke

  • Using JMS Messaging Bridge in BPEL

    Hi
    I wanted to create a bpel process to put a message on to a JBoss queue on an external system.
    I could see from many forums that JMS Messaging bridge is a suitable option to go ahead. I could create new JMS destinatiosn and a JMS bridge on top of that.
    Can some once help me out with a sample bpel process inidcating how to use the JMS bridge within the bpel prpcess.
    Thanks in advance

    Hi
    You can define the same queue in both domains.
    In domain A ( the source ) create the Origin of bridge
    In domain A too ( the source) create the destination of bridge ( pointing to address and port of domain B)
    In domain A create the bridge ( joining source and destination )
    In domain A , deploy the connector ... a .rar file
    Best Regards
    Jin
    PD: this doesn?t affect the code of your app.

  • How To Set JMS Message ID

    Hi,
    I am working for a client that uses a MQ Series as their interface routing infrastructure.  They have written some custom tools that log MQ messages.  Their tools expect the MQ message ID to be in a specific format YYYY_MM_DD_HHMMSS_AAAAAA where AAAAAA is a unique set of characters based on the millisecond.
    Is it possible to set the JMS message ID on a JMS receiver adapter?
    Thanks in advance for your help,
    Craig

    Hi Craig,
    as it looks you have to set the Message Id in a special format. I am not sure if this is possible at all. I didn't find a way to influence how XI sets the JMS Message Id.
    Maybe you could work with the JMS Correlation ID instead and have your client adapt his tools. You can use either a User-Defined Function or a Java Mapping, setting the so-called Adapter-specific attribute DCJMSCorreleationId
    Here you can find an example how to do this in the User-Defined Function:
    http://help.sap.com/saphelp_nw04/helpdata/en/43/03612cdecc6e76e10000000a422035/frameset.htm
    In a Java Mapping it is similar:
    http://help.sap.com/saphelp_nw04/helpdata/en/43/09b16006526e72e10000000a422035/frameset.htm
    This example uses the File Adapter, but the same applies for the JMS Adapter.
    The JMS Adapter has the namespace http://sap.com/xi/XI/System/JMS
    Have a look at this one to find out more about the Adapter-specific attributes of the Receiver JMS Adapter:
    http://help.sap.com/saphelp_nw04/helpdata/en/10/b1b4c8575a6e47954ad63438d303e4/frameset.htm
    I hope that this information is of some help for you.
    regards,
    Peter

  • How to send JMS Message from a BPM Process

    Hi All
    I have small query regarding sending JMS Message from a bpm process. Is it possible to send JMS message from one bpm process to another bpm process.
    I have a scenario in which I need to send a JMS message to a queue where another process is listening on that queue and as soon as the message is received on the queue the process instance is created.
    I know how to listen for the JMS message on the queue, but I don't how to send a JMS message from a process.
    Also Can I create process by sending the Notification to the process instead of a JMS message. But the process to be created is not a subprocess i.e. Can notification be send accross different processes.
    Any information or example in this regard would be helpful.
    Thanks in advance
    Edited by: user9945154 on Apr 22, 2009 7:46 PM

    Hi,
    Here's one approach to sending JMS messages from an Oracle BPM process. If you're doing this just to send a message into another process, do not take this approach. It's far easier and quicker if you do this using the OOTB "send notification" logic.
    These steps describe how to do this using WebLogic. The steps would be different if you're using another ap server / JMS provider.
    1. Guessing you've already done this, but first expose the two required WebLogic jar files for JMS messaging as Java components in the External Resources. The two files for WebLogic are weblogic.jar and wljmsclient.jar” (located in the < WebLogic home directory > /weblogic/server/lib” directory).
    AquaLogic BPM JMS Queue Listener for WebLogic 8.1
    2. You've probably already done this, but add an External Resource to represent the J2EE container:
    • Name: “weblogicJ2EE” - this is important and will be used in the next step
    • Supported Type: “GENERIC_J2EE”
    • Initial Context Factory: “weblogic.jndi.WLInitialContextFactory”
    • URL: “t3://localhost:7001”
    • Principal: and Credentials: whatever userid and password you defined to access theWebLogic administrative console.
    3. Create the External Resource that represents the send queue configuration. In this example, I'm calling it “WebLogic Send Queue”. This is important - remember what you named it because you will use this name in the logic that sends the JMS message. This new External Resource is configured as:
    • J2EE: “weblogicJ2EE” (same name as the second External Resource you created)
    • Destination Type: “QUEUE”
    • Lookup Name: “weblogic.examples.jms.exampleQueue”
    • Connection Factory Lookup Name: “weblogic.examples.jms.QueueConnectionFactory”
    4. Here's the logic to send a Message to the Queue
    <pre class="jive-pre"><p />msg as String = "Hello World"
    jmsMsg as Fuego.Msg.JmsMessage
    msg = "<?xml version=\"1.0\"?><Msg>" + msg + "</Msg></xml>"
    jmsMsg = JmsMessage(type : JmsMessageType.TEXT)
    jmsMsg.textValue = msg
    sendMessage DynamicJMS
    using configuration = "WebLogic Send Queue",
    message = jmsMsg</pre>
    Note that the “sendMessage” method uses the configuration parameter “WebLogic Send Queue”. You previously created a JMS messaging service External Resource with this name in the third step.
    Again, please don't go this route if you're just using it to send notifications between processes,
    Dan

  • How to send JMS message from oracle to weblogic

    Hello,
    I am facing with a problem of sending jms message from oracle to weblogic. I am using oracle 10g and weblogic server 9.1. Here is the problem. I would like to create a trigger to send JMS message to weblogic server whenever there is an update in oracle database. So I created a java class that will send a jms message to weblogic server. But in that class I use the jndi from weblogic: weblogic.jndi.WLInitialContextFactory
    when I use the loadjava utility to load that class into oracle, the status of that class is invalid though this class is working fine in eclipse with the weblogic.jar included. I was thinking because the jndi from weblogic needs the weblogic.jar in order to work, then I loaded that jar file into oracle (it took about 20 minute to load everything) and everything loaded into oracle from that jar file is invalid and missing some reference.
    So my question is: how do I send a jms message from oracle to weblogic using a java class with the right jndi?
    Any help will be appreciated.
    Thanks
    TL

    It should be quite straightforward to do this. As stated you need weblogic.jar in your classpath, then use 100% standard JMS calls to publish.
    Ensure that you set the following properties before getting your initial context:
    java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
    java.naming.provider.url=t3://node:7001 (or whatever)
    this will ensure that the correct JMS implementation classes are invoked.
    You can't easily (without some mucking around) build a test implementation in an AQ environment and then deploy to WebLogic because in AQ you don't tend to use JNDI lookups (unless you've implemented oracle JNDI etc) but rather use non standard factory class to create connections etc.

  • ALDSP 3.2 - How to create JMS message from ALDSP

    Is there a way to write a jms message from ALDSP?
    I want to be able to perform database updates to a database and also write a message to queue in a transaction.
    Thanks

    As per my understanding only one resource can be non-transactional. In this case it would be the Web Service.If you have n data sources and the first n-1 are transactional and the nth one is not - if you update the first n-1 successfully, and the nth one fails - then you just throw an exception and the updates to the n-1 data sources get rolled back. If an update to one of the n-1 data sources fails you throw an exception and the update to the nth data source never happens. In your case, it's up to you to ensure the updates are executed in the correct order (how you write your XQSE procedure).
    Will the call to write a jms message from a Java function in ALDSP participate in the database transaction? DSP doesn't suspend the current transaction when calling a Java function. So yes, the JMS call would participate in the same transaction as the database call.
    If you want to dump out the transactionId in your java function in the same format as it appears in the DSP Audit, you can use :
    public String byteArrayToHexString(byte in[]) {
    StringBuffer out = new StringBuffer(in.length * 2 + 2);
    out.append("0x");
    for(int i = 0; i < in.length; i++) {
    byte ch = 0x00;
    ch = (byte) (in[i] & 0xF0);
    ch = (byte) (ch >>> 4);
    ch = (byte) (ch & 0x0F);
    out.append(HEX[(int) ch]);
    ch = (byte) (in[i] & 0x0F);
    out.append(HEX[(int) ch]);
    return out.toString();
    }

  • How to create multipart message manually in wcf consumptions

    Hi,
    My purpose is to consume simple wcf service through biztalk and I am also able to do this for doing this i have following steps
    step 1)  add -->generated itmes -->consume wcf service      
    through this wizard  i got one .odx file two binding xml  files and some schemas
    step 2) in oxd file i created 3 messages 
    1-msgIn which is a simple type of mesage which is accepting input from our request schema
    2-msgWcfReq- by this message we are sending a request to wcf (but when we are selecting the messagetype for this message we are selecting it form "multipart message type node" inside this node there are some automatically generated schemas when
    we used wcf wizard)
    3-similarly for response message also we are selecting messagetype from "multipart message type node".
    and rest of the mapping we are doing and we deployed the solution and we importing the binding file which was genrated by wcf wizrad.
    so it automatically fill everything for WCF port like pipeline/wcf url/soap action header
    Now My question is if i am deleteing the automatically generated odx file then we don't have those aotogenrated port and schemas which are comming under "multipart message type node" 
    so now how we can achieve the same thing means now i am trying to create same 3 type of message which i discussed above,because if i am trying to create multipart message manually then we don't have any schema type of things inside "multipart message
    type node".
    if this problem is resolved the everything will work for me  because in administration console still i want the same "bindinginformation.xml " file for wcf port bindings.
    Please help me
    Thx
    Manoj

    Hi Manoj,
    You should not delete the auto generated orchestration even do not modify it, as it is stated in msdn.
    The BizTalk WCF Service Consuming Wizard creates in your BizTalk project the BizTalk schemas and types necessary to consume WCF services. The BizTalk types such as port types and multipart message types are created in an orchestration. We recommend
    that you do not modify the orchestration that the wizard creates. Instead, you can add new orchestrations in the BizTalk project for your purposes.
    --------- MSDN
    For Refernce
    In your solution, if you are seperating your schemas project from orchestration project, in that case i personally advise to generate wcf endpoint in your schema project and after adding schema reference in orchestration
    project you manually create the multipart message and a request response port as it will not display in existing port.
    Regards

  • How to consume JMS message in oc4j from web logic server 11.1.1.3

    Hi all,
    I would like to know how to consume the JMS messages in oc4j instance from 11.1.1.3 (web logic). Can anyone guide me any documentation? Thanks.
    Soe

    Hi,
    Have a luk at the below link
    http://blogs.oracle.com/TechMusings/2008/08/connecting_to_weblogic_jms_pro.html
    you also have other options like creating foreigh JNDI or JMS bridge.

  • How to user JMS Message in the BP using eInsight

    Hi All,
    could you Pl. help me how to use the JMS message in the eInsight, where is the option available Inorder to drag and drop it on to the BP.
    Thanks & regards
    Srikanth

    Hi Rishi90,
    I think the Exchange Server Development forum is the better forum for you question. It is appropriate and more experts will assist you about reading the emails from the exchange server.
    Thanks 
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • How to send JMS message from pl/SQL to jBoss

    Hi all,
    I need a helping. This is my problem:
    There's a queue which is definitied under the Jboss. I would like send a message from pl/SQL to jBoss.
    Why is't working??
    http://www.oracle.com/technology/sample_code/tech/java/jsp/samples/jms/Readme.html
    thnk's,
    fgy,,

    You can defince a queue in Oracle, then access this queue from your Jboss application. Not sure if you need JMS, but there are some Oracle OCI functions that are certainly helpful for such a task.
    You might look into further details be reading the manual on Oracle Advanced Queuing or Oracle Streams.
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14257/part4.htm#i436427

  • JMS Message redelivery in BPEL

    Hi,
    I have a requirement that I want to distinguish the instance consuming original message from the instance consuming the retried message.
    eg. I have the requirement that if its the original message then I need to take the action A in the BPEL and if it is the retried one then I want to take the action B.
    Is there some mechanism with which I can differentiate the above stuff?
    Thanks in Advance.
    Best Regards,
    Amit Jain

    Hi,
    I have got the solution to above issue.
    Once my JMS adapter picks the message, it passed the message to BPEL through mediator.
    In Mediator assign, by using $in.property.jca.jms.JMSProperty.JMSXDeliveryCount I got the value.
    Thanks & Regards,
    Amit Jain

  • How to get error message from the BPEL process

    Hi,
    We have some BPEL processes running in BPEL PM 10g. If any of these BPEL process fails, we would like to get the error message caused this process to fail.
    Please let me know where does the BPEL proccess holds (table/file) these details. or is it possible to get the error message programatically.
    Thanks

    You can go through below link that can help
    http://download.oracle.com/docs/cd/B31017_01/integrate.1013/b28981/faults.htm#sthref1186
    http://bpelknowledge.blogspot.com/2010/07/error-conditions-that-cannot-be-handled.html
    http://blog.whitehorses.nl/2009/11/03/error-handling-in-soa-suite-11g/
    Hope it helps!!
    Thanks
    AJ

  • How to send jms message to mq series

    Hi all,
    I'm new to JMS and I've been asked to send an xml file to a IBM MQ series message queue.
    I need to send this message from an application running on a tomcat webserver.
    Basically, what packages do I need to start with that?
    Is that possible without installing an MQ client on the webserver?
    What parameters would I need to make a connection? I currently only know the QUEUE name and that the MQ is running on a different machine than the webserver is.
    Thank you!
    Steven

    This can help u writing to MQueue
    ==================================================================
    // Program Name
    // MQWrite
    // Last date of modification
    // 1 Oct 2000
    // Description
    // This java class will read a line of input from the keyboard
    // and send it as a message. The program will loop until the
    // user presses CTL^Z.
    // Sample Command Line Parameters
    // -h 127.0.0.1 -p 1414 -c CLIENT.CHANNEL -m MQA1 -q TEST.QUEUE
    // Copyright(C), Roger Lacroix, Capitalware
    import com.ibm.mq.*;
    import java.io.IOException;
    import java.util.Hashtable;
    import java.io.*;
    public class MQWrite {
    private MQQueueManager _queueManager = null;
    private Hashtable params = null;
    public int port = 1414;
    public String hostname = "127.0.0.1";
    public String channel = "CLIENT.TO.MQA1";
    public String qManager = "MQA1";
    public String outputQName = "SYSTEM.DEFAULT.LOCAL.QUEUE";
    public MQWrite()
    super();
    private boolean allParamsPresent()
    boolean b = params.containsKey("-h") &&
    params.containsKey("-p") &&
    params.containsKey("-c") &&
    params.containsKey("-m") &&
    params.containsKey("-q");
    if (b)
    try
    port = Integer.parseInt((String) params.get("-p"));
    catch (NumberFormatException e)
    b = false;
    // Set up MQ environment
    hostname = (String) params.get("-h");
    channel = (String) params.get("-c");
    qManager = (String) params.get("-m");
    outputQName = (String) params.get("-q");
    return b;
    private void init(String[] args) throws IllegalArgumentException
    params = new Hashtable(5);
    if (args.length > 0 && (args.length % 2) == 0)
    for (int i = 0; i < args.length; i+=2)
    params.put(args, args[i+1]);
    else
    throw new IllegalArgumentException();
    if (allParamsPresent())
    // Set up MQ environment
    MQEnvironment.hostname = hostname;
    MQEnvironment.channel = channel;
    MQEnvironment.port = port;
    else
    throw new IllegalArgumentException();
    public static void main(String[] args)
    MQWrite write = new MQWrite();
    try
    write.init(args);
    write.selectQMgr();
    write.write();
    catch (IllegalArgumentException e)
    System.out.println("Usage: java MQWrite <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
    System.exit(1);
    catch (MQException e)
    System.out.println(e);
    System.exit(1);
    private void selectQMgr() throws MQException
    _queueManager = new MQQueueManager(qManager);
    private void write() throws MQException
    String line;
    int lineNum=0;
    int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
    try
    MQQueue queue = _queueManager.accessQueue( outputQName,
    openOptions,
    null, // default q manager
    null, // no dynamic q name
    null ); // no alternate user id
    DataInputStream input = new DataInputStream(System.in);
    System.out.println("MQWrite v1.0 connected");
    System.out.println("and ready for input, terminate with ^Z\n\n");
    // Define a simple MQ message, and write some text in UTF format..
    MQMessage sendmsg = new MQMessage();
    sendmsg.format = MQC.MQFMT_STRING;
    sendmsg.feedback = MQC.MQFB_NONE;
    sendmsg.messageType = MQC.MQMT_DATAGRAM;
    sendmsg.replyToQueueName = "ROGER.QUEUE";
    sendmsg.replyToQueueManagerName = qManager;
    MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same
    // as MQPMO_DEFAULT constant
    while ((line = input.readLine()) != null)
    sendmsg.clearMessage();
    sendmsg.messageId = MQC.MQMI_NONE;
    sendmsg.correlationId = MQC.MQCI_NONE;
    sendmsg.writeString(line);
    // put the message on the queue
    queue.put(sendmsg, pmo);
    System.out.println(++lineNum + ": " + line);
    queue.close();
    _queueManager.disconnect();
    catch (com.ibm.mq.MQException mqex)
    System.out.println(mqex);
    catch (java.io.IOException ioex)
    System.out.println("An MQ IO error occurred : " + ioex);
    // Description
    // This java class will read a line of input from the keyboard
    // and send it as a message. The program will loop until the
    // user presses CTL^Z.
    // Sample Command Line Parameters
    // -h 127.0.0.1 -p 1414 -c CLIENT.CHANNEL -m MQA1 -q TEST.QUEUE
    import com.ibm.mq.*;
    import java.io.IOException;
    import java.util.Hashtable;
    import java.io.*;
    public class MQWrite {
    private MQQueueManager _queueManager = null;
    private Hashtable params = null;
    public int port = 1414;
    public String hostname = "127.0.0.1";
    public String channel = "CLIENT.TO.MQA1";
    public String qManager = "MQA1";
    public String outputQName = "SYSTEM.DEFAULT.LOCAL.QUEUE";
    public MQWrite()
    super();
    private boolean allParamsPresent()
    boolean b = params.containsKey("-h") &&
    params.containsKey("-p") &&
    params.containsKey("-c") &&
    params.containsKey("-m") &&
    params.containsKey("-q");
    if (b)
    try
    port = Integer.parseInt((String) params.get("-p"));
    catch (NumberFormatException e)
    b = false;
    // Set up MQ environment
    hostname = (String) params.get("-h");
    channel = (String) params.get("-c");
    qManager = (String) params.get("-m");
    outputQName = (String) params.get("-q");
    return b;
    private void init(String[] args) throws IllegalArgumentException
    params = new Hashtable(5);
    if (args.length > 0 && (args.length % 2) == 0)
    for (int i = 0; i < args.length; i+=2)
    params.put(args[i], args[i+1]);
    else
    throw new IllegalArgumentException();
    if (allParamsPresent())
    // Set up MQ environment
    MQEnvironment.hostname = hostname;
    MQEnvironment.channel = channel;
    MQEnvironment.port = port;
    else
    throw new IllegalArgumentException();
    public static void main(String[] args)
    MQWrite write = new MQWrite();
    try
    write.init(args);
    write.selectQMgr();
    write.write();
    catch (IllegalArgumentException e)
    System.out.println("Usage: java MQWrite <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
    System.exit(1);
    catch (MQException e)
    System.out.println(e);
    System.exit(1);
    private void selectQMgr() throws MQException
    _queueManager = new MQQueueManager(qManager);
    private void write() throws MQException
    String line;
    int lineNum=0;
    int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
    try
    MQQueue queue = _queueManager.accessQueue( outputQName,
    openOptions,
    null, // default q manager
    null, // no dynamic q name
    null ); // no alternate user id
    DataInputStream input = new DataInputStream(System.in);
    System.out.println("MQWrite v1.0 connected");
    System.out.println("and ready for input, terminate with ^Z\n\n");
    // Define a simple MQ message, and write some text in UTF format..
    MQMessage sendmsg = new MQMessage();
    sendmsg.format = MQC.MQFMT_STRING;
    sendmsg.feedback = MQC.MQFB_NONE;
    sendmsg.messageType = MQC.MQMT_DATAGRAM;
    sendmsg.replyToQueueName = "ROGER.QUEUE";
    sendmsg.replyToQueueManagerName = qManager;
    MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same
    // as MQPMO_DEFAULT constant
    while ((line = input.readLine()) != null)
    sendmsg.clearMessage();
    sendmsg.messageId = MQC.MQMI_NONE;
    sendmsg.correlationId = MQC.MQCI_NONE;
    sendmsg.writeString(line);
    // put the message on the queue
    queue.put(sendmsg, pmo);
    System.out.println(++lineNum + ": " + line);
    queue.close();
    _queueManager.disconnect();
    catch (com.ibm.mq.MQException mqex)
    System.out.println(mqex);
    catch (java.io.IOException ioex)
    System.out.println("An MQ IO error occurred : " + ioex);

Maybe you are looking for