Processing JMS messages one at a time

Hi, I'm on a project where we're trying to synch Siebel and EBS Customer information. However there are certain events that can trigger Customer data being sent twice simultaneously; this produces problematic racing conditions when the Customer data is new to the receiving system.
We're trying to throttle that by sending the messages to a JMS queue and process them one at a time, ie, we only want one instance of the JMS queue listener activated at any one time (we don't expect continuous load; mainly small bursts). Unfortunately I'm not sure which properties have to be changed to do this. I have created a JMS listener that consumes message, pretty much created by the adapter wizard. Currently the listener is spawning new instances just as fast as the messages come in causing EBS AppAdapter errors (can't create new Customer as it already exists).
Here's the JMS operation definition:
<pc:inbound_binding />
<operation name="Consume_Message">
<jca:operation
ActivationSpec="oracle.tip.adapter.jms.inbound.JmsConsumeActivationSpec"
DestinationName="jms/CustomerInterface"
UseMessageListener="false"
PayloadType="TextMessage"
OpaqueSchema="false" >
</jca:operation>
<input>
<jca:header message="hdr:InboundHeader_msg" part="inboundHeader"/>
</input>
</operation>
</binding>
This is the activation agent:
<activationAgents>
<activationAgent className="oracle.tip.adapter.fw.agent.jca.JCAActivationAgent" partnerLink="ReceiveAccountJmsAdapter">
<property name="portType">Consume_Message_ptt</property>
</activationAgent>
</activationAgents>
This is the connector-factory:
     <connector-factory location="eis/CustomerInterface" connector-name="Jms Adapter">
          <config-property name="connectionFactoryLocation" value="jms/Queue/CustomerInterface"/>
          <config-property name="factoryProperties" value=""/>
          <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE"/>
          <config-property name="isTopic" value="false"/>
          <config-property name="isTransacted" value="false"/>
          <config-property name="username" value="oc4jadmin"/>
          <config-property name="password" value="********"/>
          <connection-pooling use="none">
          </connection-pooling>
          <security-config use="none">
          </security-config>
     </connector-factory>
What else will I have to do to get this to work? Or will I be forced to deploy it to it's own BPEL domain where dspMaxThreads and dspMinThreads are set to 1?
-- Just tried to put it on its own domain and change the dspMaxThreads/dspMinThreads and that didn't work.
- Dale
Message was edited by:
Dale Earnest

Hi Al,
Yes - it possible.
Please read the section Describing Message Ordering of the Adapter Life-Cycle Management of the Application Server Adapter Concepts Guide found here: http://download.oracle.com/docs/cd/B31017_01/integrate.1013/b31005/life_cycle.htm#BABJIFJI
Best regards
Christian Damsgaard

Similar Messages

  • Dequeue messages one at a time

    We have a scenario where we have to send messages to a server(on a TCP/IP port).
    However since we are expecting huge volumes and the server cannot handle such huge volumes, we are dumping all the messages into an AQ.
    We want to dequeue these messages one at a time and send them to this server.
    The AQ Adapter however seems to dequeue all the messages in the queue in one shot. It then creates separate instances for each message and bombards the server with these messages.
    The whole purpose of using the queue is not served.
    Is there anyway we can throttle this dequeuing?
    The AQ Adapter gives 2 options:
    1) Polling : In this case however each time it polls it picks up all the messages in the queue that are ready to be dequeued.
    2) Notification : Havent seen much documentation around this? Am not sure if this will solve our problem.
    Any possible alternatives/solutions are welcome.
    Thanks,
    Vinod.

    Hi Vinod,
    To follow up on Lili's reply, you can refer to the solution I posted in the following thread:
    Re: About AQ ADT example functionality
    Scroll down to the section "How to make AQ process synchronous" and follow the outlines steps.
    Thanks.

  • Failed to process JMS message

    Hi,
    While trying to read the message in Queue from my BPEL, Iam getting the following error:
    JMSBC-E0713: Failed to process JMS message [com.stc.jmsjca.core.WTextMessageIn@ffae4c] in onMessage: Content is not allowed in prolog.
    org.xml.sax.SAXParseException: Content is not allowed in prolog.
    Can any one provide some suggestion on how to resolve this error.

    No, Iam just storing a simple message say "Hello" in the queue, the message is stored in the queue but it is shown in the below format when I opened that file in Notepad:
    UUªª ªªUU ‡ÿãÂ- ‡ 6›4•Z 6›4”öÿ Â
    Ô£9™ÿÿ¬h ÎM o „      fÂ6›4”ñ Trial4 com.sun.messaging.BasicQueue Hai ªªUU
    and soon Iam getting this error below:
    [Fatal Error] :1:1: Content is not allowed in prolog.
    JMSBC-E0713: Failed to process JMS message [com.stc.jmsjca.core.WTextMessageIn@1e377d5] in onMessage: Content is not allowed in prolog.
    org.xml.sax.SAXParseException: Content is not allowed in prolog.

  • Processing JMS messages in sequence one after another

    This is my use case which I wan to implement in OSB.
    1. I have a queue which will receive messages in huge numbers from a single sender.
    2. I have a proxy which will read each message and process the message and send it out.
    In step 1 , I want each message to be read sequentially and when step 2 finishes executing then I want to read the next message from the queue.
    I need to give an acknowledgment to JMS that the message has finished processing and it can make the next message available to the proxy.
    What is the best option to implement this use case ?.
    Regards

    By default Weblogic JMS Queues are FIFO. But that is true only if there is only one consumer of the queue.
    In case of a clustered environment that is not true and in case of OSB even with a single managed server multiple threads are created for a JMS listener Proxy(by default 16). So there will be 16 instances of the Proxy trying to read messages from the Queue and each will be handed out a message and sequential integrity is disturbed.
    There are three ways to overcome this problem:
    1. Unit of Order
    This is suitable only when you want messages of the same group to be processed sequentially while multiple groups can be processed in parallel.
    For e.x. you are getting multiple orders for multiple customers and you want to ensure that the orders of same customer are processed sequentially (in case a customer tries to change the quantity of an order then the latest one should be processed last). In this case you can set UOO as the CustomerID and each customer's order will be processed sequentially but orders of different customers will be still processed in parallel. WLS JMS achieves this by assigning a target queue instance on the cluster for each UOO value. It will assign Q!MS1 to CustID=1, Q!MS2 to CustID=2 and so on. All messages of the same UOO(of the same customer) will go to the same instance on the queue. Furthermore it will ensure that no two messages of the same UOO are released together to the listeners. So if a queue instance has 5 messages each of both Cust=1 and Cust=2, only one message each of Cust1 and Cust2 will be processed by the listeners even if there are 16 listening threads.
    Pros and Cons:
    Overall performance is improved since you can still achieve some parallel processing.
    There will be a slight overhead of processing the UOO headers on the JMS servers.
    Can not ensure sequencing of all the messages. (Although you can achieve that by setting the same UOO on all the messages)
    If the managed server assigned to a UOO is down, if a publisher tried to put the next message for that UOO, it will fail since it will not try to send that message to any other managed server.
    2. Single threaded processing
    If you don't want to process even different groups of messages in parallel and if you want absolute sequencing (i.e. irrespective of the CustomerID you want all the messages to be processed in the sequence they arrive) you will need to process them in a single threaded model. The JMS queue should be deployed on only one managed server of the cluster. The JMS proxy listening to the queue should also be deployed on a single managed server(You will need to change the targeting for the EJB created for this Proxy in the Deployments) and there should be a Work Manager for this Proxy with Maximum Thread Constraint set as 1. In the Connection Factory which the Proxy uses, set the Maximum Messages per session to 1. Another approach for Single threaded could be to set the same value of UOO on all of the messages. This will make all the messages to go to the same Q instance in the cluster and also will make sure that even if Proxy has multiple threads, only one message will be processed at a time.
    Pros and Cons:
    Completely single threaded processing, will take more time since messages will be processed one after the other.
    Load balancing will go awry as all the messages will be processed by only one server.
    3. Using custom implementation
    The most complex way is to create a completely custom implementation. Put all the messages in a DB and then process them one at a time based on timestamp.
    Pros and Cons:
    It will take more effort to implement than the other two approaches.
    It will again need single threaded processing after the messages are put on the DB
    Performance wise there will be more impact because of additional DB calls
    More complex to maintain
    Based on your exact requirements you can choose which approach you want. If you have SOA suite as well them it would be better to move this solution to SOA suite as OESB(Mediator) component of SOA suite has re-sequencing feature.

  • WLI Process only execute one at a time

    Hi Guys,
    I am new to WLI, and have what could be a simple question:
    I have a seperate java program that puts messages one by one in sequence onto a JMS queue.
    I have built a channel and a JPD that subscribes to this channel. The purpose of the JPD is to take the message from the incoming JMS queue, perform some adhoc functionality, and then return the message to a different outgoing JMS queue.
    This works fine, however how do I ensure that only one JPD process is executed in full, before another is started.
    e.g of problem: if a really big message is put onto the incoming JMS queue, it might take 10seconds to process, but in that time another message (small) is put onto the incoming queue. This means that another process instance kicks off, and that the second message is put onto the outgoing queue FIRST because it takes less time to process.
    How do I ensure that the JPD process only executes once in full, at a time?
    At the moment, the JPD has "stateless" set to false.
    Any help would be greatly appreciated.
    Regards.

    I think if you follow a similar technique as outlined in http://edocs.bea.com/workshop/docs81/doc/en/integration/samples/sampleSuppressible.html?skipReload=true then it should work. The key points are to have a synchronous subscription to a MB channel, performing all your processing within this block, and to set the JMS event generator pool size to 1.

  • Data Transfer Process (DTP) - Messages Never Received and Times Out

    Hello,
    I'm having an Issue with DTPs at the moment. First I'll give you a little background on the system
    Formerly BW 3.1, upgraded recently to BI 7.0 (Support Pack 15). Most of our Data Flows are still under 3.x style, but many are being migrated or recreated under BI 7.0 standards.
    I am able to successfully load data using DTPs however on many, and seemingly random, occasions the message for individual data packages under "Processing -> Updating InfoProvider" never arrive, and thus the DTP never completes and eventually times out.
    Under BW 3.x it was a simple matter of changing the QM status to Red and then "Update Manually" on the data package that did not receive the message. This would reprocess and complete the data package, allowing you to then turn the QM status Green and move on.
    Under BI 7.0 I do not seem to have any options for the Data Packages regardless of QM status. I have not found a way to resolve this situation and in every instance had to delete the request from the InfoProvider and try again. It seems like a rather large design flaw, so I'm hoping I'm missing something.
    Any suggestions would be greatly appreciated.
    Thanks,
    Matt

    Three things to be noted:
    1. Dont use the std. settings of 50000 records. Change it to 10000 records in DTP.
    2. Since you are not getting till Updating tab, I foresee something wrong with routine..start/end/transformation. Check there how much time it is taking.
    3. I dont think we have any option as you mentioned for QM. We need to delete the req and start the DTP again.
    Thanks..
    Shambhu

  • Processing msgs one at a time

    Hi,
    Is there any way in JMS which will help in processing messages received by onMessage() on a one at a time basis.
    What I mean is, I shud not process the next message till the first one is processed?
    I am assuming that onMessage() executes as soon as a message is put in the queue.
    Thanks,
    -raj

    i am new to JMS, please can you explain more detailed, I want to process messages one at a time. Appreciate your time..

  • JMS - PI - IDoc scenario: possible to disable check for duplicate JMS message ID?

    Dear all,
    we have a scenario JMS - PI - IDoc. We are on 7.4 SP 7 AEX.
    Once and again we get this error in PI Logs
    com.sap.aii.adapter.jms.core.channel.filter.InboundDuplicateCheckFilter.filter(MessageFilterContext filterCtx)
    Duplicated and already processed JMS message with JMSMessageID ID:414d512053415050523120202020202053f0f4852000fb39 and XI message id b0beffdbcee64c2605779eaacf27b335 detected.
    We are currently investigating the error and it seems that the duplicate message IDs already exist on the JMS (MQ) side. The messages with the same ID reside in the same queue but have different payloads, so really are different messages
    While it's certainly true that we need to get rid of those duplicate IDs in the long run, I'd like to ask if it is possible to tackle the problem from both sides.
    My sender JMS Adapter looks like this:
    Transactional JMS Session = Checked
    Set PI Message ID (MessageID) to = GUID
    Set PI conversation ID (ConversationID) to = No Value
    Enable Duplicate Handling = Unchecked
    Prefix Channel ID = Unchecked
    --> Is there any way to tell PI to just ignore the duplicate JMS ID and continue processing?
    Many thanks
    Kind regards
    Jens

    Hi Jens - Please have a look at the below note if it helps.
    If you want the duplicate messages received from different channels (that is JMS Messages with the same Message ID) to be processed as a distinct JMS messages and not as duplicate messages, select Prefix Channel ID to JMS Message ID
    Reference :
    Configuring the Sender JMS Adapter - Advanced Adapter Engine - SAP Library

  • How to display all validator messages at the same time?

    Hi Guys,
    I have a form with validators attached to a couple of my input boxes. I tried to write validators which are reusable in other parts of my app ie. social security number check etc. I also then customized the messages and it all works fine.
    But when I submit the form it displays the messages one at a time, in other words every validator is performed and if there was an error the form is rendered. I believe this is how it should behave and that's fine.
    But what if I want all validators to be performed when I submit the form?Then all messages are displayed at the top of the page and the user can make all his changes and try again. This makes more sense to me.
    So my question is whether there is a way to force the page to perform all validators when the page is submitted and then display all error messages in a h:messages tag?
    Cheers and thanks alot
    p.s. i know about and use the hidden input field validator hack which does all validations, but if I do it that way I duplicate the code which does the social security check for all applicable forms.

    Strange, I was under the impression that all validators were run by default. In my JSF apps, all the validators run and output their errors without any special confguration to make this happen.
    I wonder why yours are just running one at a time? Could you show some of your JSP code, and the hidden field validator code?
    CowKing

  • TransactionRolledbackLocalException in JMS messaging application

    Hi, I have a message driven bean (MDB) that gives the following error and I'm unable to resolve it. Any help would be appreciated. Thanks.
    [1/18/06 15:17:44:977 PST] 7d9913e7 SystemOut O Exception occurred inside AppLogMDBean: java.lang.NullPointerException
    [1/18/06 15:17:44:986 PST] 7d9913e7 ServerSession W WMSG0031E: Exception processing JMS Message for MDB AppLogReceiverMDB, JMS
    Destination jms/appLogQueue : javax.ejb.TransactionRolledbackLocalException: ; nested exception is: com.ibm.ws.exception.WsEJ
    BException
    com.ibm.ws.exception.WsEJBException
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapException(LocalExceptionMappingStrategy.java(Compiled Code))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSITransactionRolledBackException(LocalExceptionMappingStrat
    egy.java(Compiled Code))
    at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java(Compiled Code))
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
    javax.ejb.TransactionRolledbackLocalException: ; nested exception is: com.ibm.ws.exception.WsEJBException
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSIException(LocalExceptionMappingStrategy.java(Compiled Cod
    e))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapException(LocalExceptionMappingStrategy.java(Compiled Code))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSITransactionRolledBackException(LocalExceptionMappingStrat
    egy.java(Compiled Code))
    at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java(Compiled Code))
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
    this is the code for the onMessage function of the bean
    public void onMessage(javax.jms.Message msg)
              int executeStatus          = -1;
              Connection con               = null;
              DataSource ds               = null;
              String dataSourceName     = null;
              PreparedStatement stmt     = null;
              MapMessage mapMessage     = null;
              String sqlStatement          = null;
              Properties properties;
              CommonPropertiesHelper propertyHelper;
              try{
                   mapMessage = (MapMessage)msg;
                   propertyHelper = CommonPropertiesHelper.getInstance("EGOVJournal.properties");
                   properties = propertyHelper.getProperties();
                   sqlStatement = properties.getProperty("INSERT_VIRR052U_APP_LOG");
                   dataSourceName = properties.getProperty("DATA_SOURCE");
                   if ( (sqlStatement != null) && (dataSourceName != null)){
                        UserTransaction transaction = fMessageDrivenCtx.getUserTransaction();
                        transaction.begin();
                        javax.naming.InitialContext ctx = new javax.naming.InitialContext();
                        ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);
                        con = ds.getConnection();
                        if (con != null){
                             int x = 1;
                             stmt = con.prepareStatement(sqlStatement);
                             String logId     = mapMessage.getString("LOG_ID");
                             if (logId.length() > 40)
                                  logId = logId.substring(0,39);
                             String jnlId     = mapMessage.getString("JOURNAL_ID");
                             if (jnlId.length() > 40)
                                  jnlId = jnlId.substring(0,39);
                             String appName     = mapMessage.getString("APPLICATION_NAME");
                             if (appName.length() > 30)
                                  appName = appName.substring(0,29);
                             String logLevel     = mapMessage.getString("LOGGING_LEVEL");
                             if (logLevel.length() > 2)
                                  logLevel = logLevel.substring(0,1);
                             String msgName     = mapMessage.getString("MESSAGE_NAME");
                             if(msgName.length() > 100)
                                  msgName = msgName.substring(0,99);
                             String msgDesc     = mapMessage.getString("MESSAGE_DESCRIPTION");
                             if (msgDesc.length() > 1800)
                                  msgDesc = msgDesc.substring(0,1799);
                             stmt.setObject(x,logId);
                             x++;
                             stmt.setObject(x,jnlId);
                             x++;
                             stmt.setObject(x,appName);
                             x++;
                             stmt.setObject(x,logLevel);
                             x++;
                             stmt.setObject(x,msgName);
                             x++;
                             stmt.setObject(x,msgDesc);
                             x++;
                             // Execute the Prepared Statement
                             executeStatus = stmt.executeUpdate();
                             stmt.close();
                             con.close();
                             transaction.commit();
                        else{
                             System.out.println("Connection is null inside AppLogMDBean");
                   else{
                        System.out.println("Either sql or dataSource is null inside AppLogMDBean. Can't continue.");
              catch(NamingException e){
                   System.out.println("NamingException occurred inside AppLogMDBean: " + e);
              catch(JMSException e){
                   System.out.println("JMSException occurred inside AppLogMDBean: " + e);
              catch(Exception e){
                   System.out.println("Exception occurred inside AppLogMDBean: " + e);
              finally{
                   try{
                        if(stmt!=null){
                             stmt.close();
                             stmt = null;
                        if(con != null){
                             con.close();
                             con = null;
                   catch(Exception e){
                        System.out.println("Exception occurred inside AppLogMDBean in finally block : " + e);
         }

    Hi, I have a message driven bean (MDB) that gives the following error and I'm unable to resolve it. Any help would be appreciated. Thanks.
    [1/18/06 15:17:44:977 PST] 7d9913e7 SystemOut O Exception occurred inside AppLogMDBean: java.lang.NullPointerException
    [1/18/06 15:17:44:986 PST] 7d9913e7 ServerSession W WMSG0031E: Exception processing JMS Message for MDB AppLogReceiverMDB, JMS
    Destination jms/appLogQueue : javax.ejb.TransactionRolledbackLocalException: ; nested exception is: com.ibm.ws.exception.WsEJ
    BException
    com.ibm.ws.exception.WsEJBException
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapException(LocalExceptionMappingStrategy.java(Compiled Code))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSITransactionRolledBackException(LocalExceptionMappingStrat
    egy.java(Compiled Code))
    at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java(Compiled Code))
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
    javax.ejb.TransactionRolledbackLocalException: ; nested exception is: com.ibm.ws.exception.WsEJBException
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSIException(LocalExceptionMappingStrategy.java(Compiled Cod
    e))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapException(LocalExceptionMappingStrategy.java(Compiled Code))
    at com.ibm.ejs.container.LocalExceptionMappingStrategy.mapCSITransactionRolledBackException(LocalExceptionMappingStrat
    egy.java(Compiled Code))
    at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java(Compiled Code))
    at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java(Compiled Code))
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
    this is the code for the onMessage function of the bean
    public void onMessage(javax.jms.Message msg)
              int executeStatus          = -1;
              Connection con               = null;
              DataSource ds               = null;
              String dataSourceName     = null;
              PreparedStatement stmt     = null;
              MapMessage mapMessage     = null;
              String sqlStatement          = null;
              Properties properties;
              CommonPropertiesHelper propertyHelper;
              try{
                   mapMessage = (MapMessage)msg;
                   propertyHelper = CommonPropertiesHelper.getInstance("EGOVJournal.properties");
                   properties = propertyHelper.getProperties();
                   sqlStatement = properties.getProperty("INSERT_VIRR052U_APP_LOG");
                   dataSourceName = properties.getProperty("DATA_SOURCE");
                   if ( (sqlStatement != null) && (dataSourceName != null)){
                        UserTransaction transaction = fMessageDrivenCtx.getUserTransaction();
                        transaction.begin();
                        javax.naming.InitialContext ctx = new javax.naming.InitialContext();
                        ds = (javax.sql.DataSource) ctx.lookup(dataSourceName);
                        con = ds.getConnection();
                        if (con != null){
                             int x = 1;
                             stmt = con.prepareStatement(sqlStatement);
                             String logId     = mapMessage.getString("LOG_ID");
                             if (logId.length() > 40)
                                  logId = logId.substring(0,39);
                             String jnlId     = mapMessage.getString("JOURNAL_ID");
                             if (jnlId.length() > 40)
                                  jnlId = jnlId.substring(0,39);
                             String appName     = mapMessage.getString("APPLICATION_NAME");
                             if (appName.length() > 30)
                                  appName = appName.substring(0,29);
                             String logLevel     = mapMessage.getString("LOGGING_LEVEL");
                             if (logLevel.length() > 2)
                                  logLevel = logLevel.substring(0,1);
                             String msgName     = mapMessage.getString("MESSAGE_NAME");
                             if(msgName.length() > 100)
                                  msgName = msgName.substring(0,99);
                             String msgDesc     = mapMessage.getString("MESSAGE_DESCRIPTION");
                             if (msgDesc.length() > 1800)
                                  msgDesc = msgDesc.substring(0,1799);
                             stmt.setObject(x,logId);
                             x++;
                             stmt.setObject(x,jnlId);
                             x++;
                             stmt.setObject(x,appName);
                             x++;
                             stmt.setObject(x,logLevel);
                             x++;
                             stmt.setObject(x,msgName);
                             x++;
                             stmt.setObject(x,msgDesc);
                             x++;
                             // Execute the Prepared Statement
                             executeStatus = stmt.executeUpdate();
                             stmt.close();
                             con.close();
                             transaction.commit();
                        else{
                             System.out.println("Connection is null inside AppLogMDBean");
                   else{
                        System.out.println("Either sql or dataSource is null inside AppLogMDBean. Can't continue.");
              catch(NamingException e){
                   System.out.println("NamingException occurred inside AppLogMDBean: " + e);
              catch(JMSException e){
                   System.out.println("JMSException occurred inside AppLogMDBean: " + e);
              catch(Exception e){
                   System.out.println("Exception occurred inside AppLogMDBean: " + e);
              finally{
                   try{
                        if(stmt!=null){
                             stmt.close();
                             stmt = null;
                        if(con != null){
                             con.close();
                             con = null;
                   catch(Exception e){
                        System.out.println("Exception occurred inside AppLogMDBean in finally block : " + e);
         }

  • Keeping JMS Messages in a dummy domain during deployment and then process

    Hello Everyone,
    I am back to deployment of java application on Weblogic server in my new project. It's been a month of sundays since I used weblogic server. Lot of things got changed for good. I have following requirement. I have been thinking about this requirement for a day or two, could not get any idea or helpful information from the internet.
    During the deployment, in the production domain, all the external bridges are stopped, so the messages coming to them are stored in a dummy domain which is just an exact replica of the actual domain containing the same structure of jms queues. After the deployment, when the actual domain is up and able to process the messages, the messages stored during outage have to be moved to the corresponding queues. This can be carried out by creating bridges again between these domains, but we are not sure of the bridge configuration is in place as amdocs told that they are doing using scripts. So they are asking me to develop some scripts which need to move messages from one domain queue to another domain queue with a option of no.of messages to be moved at a time. "
    Any help or idea on this requirement from the experts of this forum is highly appreciated. Thanks a ton in advance.
    regards
    Siva

    Digging back in time and noticed this post had no response. There are several options:
    * Write an MDB to do the task (a small amount of code -- so a recent WL MDB programmer's guide for examples). Deploy the MDB to the target domain that receives from the source domain. Undeploy the MDB once all messages are transferred.
    * Write a java client program.
    * Configure and use bridges.
    If you want to preserve message-id and timestamp, you can leverage the WLMessageProducer "forward()" verb.
    Hope this helps,
    Tom

  • 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 ?

  • Wy douse the bridge override time to live for individual jms-messages?

    Hi, we have a problem with time to live for individual jms-messages.
              We have a JMS-bridge (ASYNC) between two wls, one application publish a jms masseage on a jms queue with the QueueSender. When the message i sent we set the time to live for the jms-message.
              The bridge then transport the jms message from one wls to the an other. When the message i received on the subscriper side the message time to live is no longer set to the value we specified, the value is now overrided with the default time to live value set on the source ConnectionFactor.
              How do prevent the override of the time to live value.
              Regards
              /Johan

    Hi,
              If the target destination is WL 9.0 or higher you can configure the bridge to preserve message properties -- the MBean attribute name is "PreserveMsgProperty".
              Alternatively, if source and target destination are WL 9.0 or higher, you can configure WebLogic store-and-forward instead of a bridge.
              Finally, if the expiration time is always the same relative to the current time at the point when the bridge forwards the message, you can administratively configure the target destination with a "TimeToLiveOverride" (via the destination configuration itself - not the bridge configuration).
              Tom

  • 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

  • Kick off a business process with JMS message

    I'm a newbie with a job that's way over my head and I'm thouroughly confused on
    the logic involved with kicking off a business process (workflow) through the
    reciept of a JMS message. The docs say it can be done. I have a business process
    in one project folder of an enterprise app, its start node is a channel subscription.
    Can I somehow send a JMS message directly to the business process? (Send a message
    NOT from within the weblogic environment, but from outside) I have created a
    Message Driven bean in a seperate project folder of the same application as the
    business process. From an outside client, I think I might need to invoke the
    MDB with a JMS message, then call the business process from there. Is this totally
    off-base? What do event generators have to do with any of this?
    Please help.

    Yes, you use the event generator.
    Open up the Weblogic Integration console, click on Event Generators.
    Add a JMS Event generator that listens to the queue you are interested
    in, and then select the channel that your process has subscribed to.
    Lisa wrote:
    I'm a newbie with a job that's way over my head and I'm thouroughly confused on
    the logic involved with kicking off a business process (workflow) through the
    reciept of a JMS message. The docs say it can be done. I have a business process
    in one project folder of an enterprise app, its start node is a channel subscription.
    Can I somehow send a JMS message directly to the business process? (Send a message
    NOT from within the weblogic environment, but from outside) I have created a
    Message Driven bean in a seperate project folder of the same application as the
    business process. From an outside client, I think I might need to invoke the
    MDB with a JMS message, then call the business process from there. Is this totally
    off-base? What do event generators have to do with any of this?
    Please help.

Maybe you are looking for

  • Skype Click to Call Not Working for Landlines and ...

    Hello, I am trying to use Skype Click to Call, but it does not seem to be working. I was able to call contacts using callto://CONTACT_NAME, but the second I try to call any mobile or landline number (I.E. - callto://9731234567), it does not work. Sky

  • How to show only six values in dropdown box in design studio 1.3

    Hi, There was an requirement from our client to show only last six months in the drop down, when actually there is almost past 30 months are coming from the database. The data format also looks similar to "2014007", "2014006:..etc. Any idea to achiev

  • Cannot burn dvd without theme

    I cannot do what would seem to be the simplest step in imovie and idvd. I have created my customize movie in imovie (no canned themes or audio) and when I go to the shre menu and choose idvd so I can burn my movie, I cannot burn a dvd without first c

  • Saving to cd and showing on video

    Hello, I can make a slideshow with photos in iPhoto and add music from iTunes and save this to a cd. It won't play on a video machine because the machine doesn't recognise the 'slideshow' format. Is there anything I can do to remedy this problem? Hel

  • Diadem: Save as time vector as "DDC_Timestamp"

    Hello, I am writing measurement data into .tdms files using LV 2009 SP1. Time is recorded in timestamp format into a seperate channel. Due to an error in group and channel naming on the LV side, I have renamed group and channel names in existing .tdm