JMS message content / Which is better?

hi all,
i am a beginner with JMS. i have tried some examples, and now i would like to build my own application using JMS.
Now, i have to face the issue of the message type 2 carry:
- String
- Java Object
Once i read somewhere that in JMS is recommended to use a String message, rather than sending a message that contains an Object.
Is that true?
thanx and regards
marco

What type of messages you use really depends on your requirements and how time critical your application is. In general, sending large objects as messages can comsume lot of CPU cycles and could slow down your JMS server and clients. If it is an absolute requirement to use object messages, try to keep the message size less than 2-3 Mb. Some JMS vendors do not support message sizes more than 4-5 Mb. But if you are using JMS primarily for messaging, String messages should be fine.
You could develop your own request-response mechanism using the JMS implementation. This can be achieved by creating temporary topics and then sending out large object messages directly via sockets.

Similar Messages

  • JMS Message ID retrieval using Java

    Hi,
    I have built a flow the sequence which is JMS Producer(BPEl)->JMS Consumer(Bpel)->A Bpel composite inserting into database. Now i have deliberately faulted the bpel instance. now i want to capture the faulted consumer bpelcomposite instance id which i have been able to do as well as retrieve the jms message id which i have been unsuccessful.
    i have imported the package javax.jms.Message and my code is as follows
    public class FaultHandlingPOC implements IFaultRecoveryJavaClass{
    public void handleRetrySuccess(IFaultRecoveryContext ctx) { 
    System.out.println("This is for retry success");
    handleFault(ctx);
    public String handleFault(IFaultRecoveryContext ctx) {
    BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl) ctx;
    Message m = (Message)ctx;
    System.out.println("Composite Instance: " + bpelCtx.getCompositeInstanceId());
    try {
    System.out.println("JMS Message ID" + m.getJMSMessageID());
    } catch (JMSException e) {
    System.out.println("Insert Failed");
    return "RETHROW";
    The error generated is Class Cast Exception though i am able to retrieve the Bpel composite instance id
    Please help.

    you can't cast IFaultRecoveryContext into anything else, it's an Interface and it doesn't extend anything:
    public interface IFaultRecoveryContext
    public abstract String getIndex(int i);
    public abstract Map getProperties();
    public abstract String getActionId();
    public abstract String getPolicyId();
    public abstract String getActivityType();
    public abstract String getActivityId();
    public abstract String getActivityName();
    public abstract String getWsdlLocation();
    public abstract String getPartnerLinkName();
    public abstract QName getPortType();
    public abstract String getCorrelationId();
    public abstract BPELFault getFault();
    public abstract BPELProcessId getProcessId();
    public abstract String getStatus();
    public abstract void setStatus(String s);
    public abstract String setTitle(String s);
    public abstract String getTitle();
    public abstract int getPriority();
    public abstract void setPriority(int i);
    public abstract long getInstanceId();
    public abstract Locator getLocator();
    public abstract void addAuditTrailEntry(String s, Object obj);
    public abstract void addAuditTrailEntry(String s);
    public abstract void addAuditTrailEntry(Throwable throwable);
    public abstract Object getVariableData(String s)
    throws BPELFault;
    public abstract Object getVariableData(String s, String s1)
    throws BPELFault;
    public abstract Object getVariableData(String s, String s1, String s2)
    throws BPELFault;
    public abstract void setVariableData(String s, Object obj)
    throws BPELFault;
    public abstract void setVariableData(String s, String s1, Object obj)
    throws BPELFault;
    public abstract void setVariableData(String s, String s1, String s2, Object obj)
    throws BPELFault;
    }

  • What constraints force usage of Synchronous JMS Messaging

    Hi,
    I fail to understand why would synchronous JMS messaging be used when there are multiple ways of achieveing remote synchronous calls.
    I have read the threads on JMS, some people have mentioned that due to some constraints they are forced to use JMS Synchronous messaging.
    What are the contraints that force Synchronous JMS Messaging?
    Which commercial applications use Synchronous Messaging?
    Thanks
    Rashmi

    In our project, the only time sync messaging seems to make any sense is if a human is waiting on the answer as opposed to a headless type of systematic transaction. This represents a very small portion of our problem space.
    hope this helps
    ricardo

  • MQ Message content conversion using JMS

    I want to use JMS content conversion to convert MQ messages into XML (Idoc). We currently use the R/3 link application to send data to/from MQ to SAP.
    Each MQ message is one continuous stream of data with no carriage returns or line feed between the header and lines. When I set-up the JMS mapping commands, it sees the message as one string of data and does not map out the separate idoc segments.  Can I use JMS file content conversion or will I need some type of JAVA mapping module to handle the mapping for each different type of Idoc segment?  If it;s JAVA, could you provide an example.  Thanks   Jim

    Hi Jim,
    Go through the following link which disscusses the JMS Content Conversion.
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/f02d12a7-0201-0010-5780-8bfc7d12f891
    Amaresh

  • Accessing the Content of JMS Message

    Hi, i'm very much a beginner in Java EE so I apologise if the question is overly simple.
    I have an Enterprise Java Application which consists of an application client a web application and a Message Bean.
    The application client can send JMS messages to the message bean, which it recieves and accesses the content with message.getText(). My question is how to access this text in a servlet contained in the webapp?
    Also the servlet can send messages, which another message bean recieves, and which I want to access in the application client. This I also don't know how to do.
    Thanks for your time,
    atreides7887

    1. Do you actually have a need to convert to and from string? Why not send a java instance directly onto JMS?
    2. JMS (and Sun MQ, doesn't provide for the gathering of multiple messages. For that, you would have to either code it yourself, or take a look at iep (See [here for a blog|http://blogs.sun.com/sblais/entry/iep_for_message_ordering] on an aspect of it.) Iep is the exact answer for this type of problems, but it would require you to learn another technology and include open esb in your project. Not something you would like to do at the moment. Later when you're ready, I guess.
    3.With Java, there are many solutions to any problems. Knowing little about the problem you're trying to address, you will get a lot of different avenues from people. Hence, the topic discussion. From this description, it doesn't sound like you need them. The choice for the implementation is yours, based on your needs and expertise.
    It sound like you're using JMS as a state machine for your servlet. Is that the case? Do you actually have multiple applications talking to one another? You may need just a DB to store your image and related information, using the queuing as a trigger to know that the data is there and ready... It would avoid you sending the same data over an over again on MQ... Unless I misunderstand what you are trying to do.
    TE

  • Which is better for bulk message scenario in sap xi RFC or Proxy

    which is better for bulk message scenario in ( RFC or Proxy ) ?
    Edited by: prabhatxi on Aug 6, 2010 4:44 PM

    Proxy will alwaays be better option in this case, as it is adapter less framework, and communication happens directly with XI central integration engine. So it is always fast communication and gives good performance.
    But still you should consider other factors, you may consider using RFC as well, as sometime we go for RFC/IDOC as this are the standard interfaces already available rather than creating structure...
    May be you can share more info on what type/volume data are you planning to send via XI?
    Hope this cleart your doubt..
    Divyesh

  • I am unable to send JMS message to application which resides in third party

    I am able to produce the Message into JMS demoQueue which is available in SOA 10.1.3.3. And also I tried remote server which is available in my office it having the application SchoolMAX with JMS Configuration. So I need to produce the JMS message into SchoolMAX application. But I am unable to pass to the data’s to that SchoolMAX JMS.
    for this I have configured the respective queues, queue factory etc in Enterprise Manager , but i am not able to access our application which is in remote server through third party in JDeveloper for BPEL Process.
    please i am very new to this JDeveloper & BPEL Console , please help me out in resolving the issue ASAP. please we will be waiting for some reply.

    Hi Kathy,
    Happy Holidays!  Do you have an iPad with cellular service and a text-messaging plan?
    Send messages with your iPhone, iPad, or iPod touch - Apple Support
    http://support.apple.com/en-us/HT201287
    What's the difference between SMS/MMS and iMessage?
    SMS/MMS lets you send text messages and photos to other cellular phones or devices. iMessage lets you send text messages and photos to another iOS device over Wi-Fi, without worrying about text-messaging charges (cellular data charges may apply). 
    What do I need to use SMS/MMS and iMessage?
    Here's what you need to use SMS/MMS and iMessage:
    SMS/MMS: A text-messaging plan. Contact your carrier for more information.
    iMessage: An iPhone, iPad, or iPod touch with iOS 5 or later.
    How do I know if my message used SMS/MMS or iMessage?
    You can tell which type of message you're sending by the color of the Send button and text bubble.
    SMS/MMS: Send button and text bubbles are green.
    iMessage: Send button and text bubbles are blue.
    How can I link my iPhone number with Messages on my iPad, iPod touch, or Messages for Mac?
    When you sign in to Messages with your Apple ID on your iPhone, you link your phone number to your Apple ID. If you then sign in to Messages with the same Apple ID on your iPad, iPod touch, or Mac, Messages will link that device to your phone number as well.
    I hope this information helps ....
    - Judy

  • How to parse XML content in JMS Message...

    Hi everybody,
    I am currently developing a Message-Driven Bean and has some problem parsing the XML data that contains in the JMS body.
    The XML data is contained in TextMessage (JMS message type) and in order to parse the data, I need to use the DOM builder, which is expecting to read from a file (e.g. abc.xml).
    My question is how can I use TextMessage (can be output to a String) as the input source instead of a file.
    Thanks in advance.

    Hi Boon,
    "Boon Keong" <[email protected]> wrote in message
    news:3dd46800$[email protected]..
    I am currently developing a Message-Driven Bean and has some problemparsing the XML data that contains in the JMS body.
    >
    The XML data is contained in TextMessage (JMS message type) and in orderto parse the data, I need to use the DOM builder, which is expecting to read
    from a file (e.g. abc.xml).
    >
    My question is how can I use TextMessage (can be output to a String) asthe input source instead of a file.
    What about this:
    DocumentBuilder db = ...
    Document doc = db.parse(new InputSource(new
    StringReader(textMessage.toString()));
    or
    Document doc = db.parse(new
    ByteArrayInputStream(textMessage.toString().getBytes()));
    Regards,
    Slava Imeshev

  • BusinessService which sends JMS messages to a JBoss 4.2.x server

    Hi,
    how do I configure my OSB so that I can send JMS messages to a JBoss server? I have added a Foreign JMS server with the appropriate initial context data and have put the jboss relevant jars into my <domain>/lib directory (javassist.jar, jbossall-client.jar, jboss-aop-jdk50.jar, jboss-messaging-client.jar, trove.jar) but I still get an error in the proxy service when it forwards the message to the business service referencing the imported JMS queues and connectionFactory. The message is:
    <18.02.2010 18:00 Uhr MEZ> <Warning> <ALSB Logging> <BEA-000000> < [RouteToJboss, _onErrorHandler-1181696354513531347--39bf6a8e.126dc62f38e.-7e57, Log error, ERROR] Error occurred in flow: BEA-380002[JMSPool:169803]JNDI lookup of the JMS connection factory jboss.connectionFactory failed: javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]RouteToJbossrequest-pipeline>
    Am I missing something?
    Best regards,
    Dimo
    PS. I also had to put a newer log4j version in the preclasspath because jboss client seems to require verisons >= 1.2.12 and the one shipped with OSB does not cut it

    There is a difference between supported and certified.
    ADF was certified (meaning tested) with JBoss 4.0.4.
    We didn't test with JBoss 4.2 so we don't know if it works or not.
    However it is supported - meaning that if you try to deploy to 4.2 and run into issues you can open bugs with Oracle support.

  • Need suggestion on  implementing JMS message error recovery

    Hi,
    Our application has a JMS topic where we publish application events. Now, there can be scenarios where the consumers cannot process the message due to some infrastructure issues and would error out. We need a way so that those messages can be reprocessed again later. we are thinking of the following design for JMS message error recovery
    1. Use a persistent TOPIC (this would ensure guaranteed delivery)
    2. Configure a error destination on JMS topic e.g a jms queue
    3. Have an error handling MDB listening to the Error destination. An error handling MDB would dequeue the errored messages from error destination and persist it to a Data base "error" table..
    4. Provide a mechanism to republish those messages to topic (e.g a scheduler or admin ui or a command line utility) .. The messages would deleted from database "error" table and published to topic again....
    A. Are there any issues with the above design which we need to handle?
    B. Are there any additional steps required in a Cluster environment with a distributed topic and distribute error destination? (our error mdb will have one-copy-per-application setting)
    B. From a performance angle, Is it OK to use persistent TOPIC ? Or will it better to persist the message to the db table and then publish it as a non persistent message ... ? (But i guess the performance should be more or less the same in both of these approaches)
    C. Are there any other recommended design patterns for error recovery of JMS messages
    Please advise.
    Regards,
    Arif

    Thanks Tom !
    We may not be able to go with the approach of delaying/pausing redelivery of the messsage because
    1. Pausing entire MDB approach: Our MDB application consumes messages generated by different producers and our MDB needs to continue processing the messages even if messages corresponding to one producer is erroring out
    2. Redelivery delay : This would only delay the retry of an errored message. But there would still be a problem if the message fails during all retries (i.e redelivery limit count). We don't want to lose this message. In our case, It is possible that a particular message cannot be processed due to unavailability of a third party system for hours or may be a day.
    Basically, i am looking on approaches for a robust and performant error recovery/retry framework for our application (refer details in my first post on this thread) while fully making use of all features provided by middleware (WLS). Please advise.
    Regards,
    Arif

  • JMS messages stuck in queue in weblogic v923 cluster

    Hi all,
    Enviornment details:
    In our pre-production weblogic v923 cluster enviornment with Oracle 10g database, there are 10 server boxes with 2 managed nodes running on each server box in linux enviornment.
    There are 3 JMS queues and 1 error queue per managed node.
    All the queues are durable and the persitence store is a database table. There is a single database table per single managed node.
    High loads of JMS messages from client applications coming on each of the 3 JMS queue are processed by the cluster on daily basis.
    The JMS messages that failed to be processed the very first time due to the application logic exceptions are put on error queue since the retry is set to zero on the non-error queue.
    The application exceptions are logged to a database table for futher reference.
    The falied messages from the error queue are read by spring based MDP and resent to the application for reprocessing.
    If no application exceptions, the message will be persisted in a relational database; in the case of failures, MDP code puts the failed message back on to the error queue.
    The auto_ack is true on the JMS message.
    It is observed about less than 1% of the messages fail the original processing and are in error queue on daily basis.
    99.9% of the time, the reprocessing of the messages from the error queue is a success.
    Currently due to some obvious reasons, the system administrator stops a managed node when the disk is full and start a different managed node on the same server box. This approach will be stopped in the very near future so that all nodes on all servers are running at any point of time by making few enviornment changes.
    Problem:
    1a) Occasionally, it is observed that 1 - 4 JMS messages are stuck in the error queue. There are no signs of reprocessing as there are no application exceptions or the corresponing insert into the database. The JMS persistence store table still has the JMS message.
    1b) It is observed that over time, the same JMS messages that were originally stuck on server 1's managed node A are no longer there but are found in a different node (say node B) on a different server box.
    As far as I understand the JMS, a message could be in a Pending state if MDP (in my case) does not automatically send ACKNOWLEGMENT back due to an issue in the Spring Defaultlisternercontainer before calling MDP's onMessage(). I am not sure as what happens to that status over time).
    It is also observed that the stuck messages content is not much different than the other messages that are processed fine.
    Any pointers/input is highly appreciated.
    Thanks in advance for your valuable input and time.

    Off the top of my head, I can only think of two reasons why a message might move from node to node:
    (A) An application is dequeueing them and enquening them elsewhere.
    (B) The application is using distributed queues, and the distributed queue has been configured to enable "queue forwarding". The forwarding feature automatically moves messages from distributed queue members that have no consumers to members that do have consumers. Queue forwarding is sometimes enabled as a work-around to better enable MDP support of WL distributed destinations, unlike WebLogic MDBs, MDPs have no container logic to ensure that all members of a distributed destination are serviced by a consumer under all circumstances...
    Regards,
    Tom

  • How to do service callout with the incoming JMS message in OSB 11g

    Hello All,
    I have a specific requirement for which I am creating a kind of POC where I need some help in OSB, however am new to OSB.
    My Environment:
    1> I have a request queue (deployed on a WLS domain) - WFReq_WS
    2> I have a response queue (deployed on a WLS domain) - WFRes_WS
    3> I have created a ProxyService (request/response type) in OSB 11g which is simply mapping the incoming message in WFReq_WS to WFRes_WS
    4> I have a WebService (it is currently a simple hello WebService for testing) which takes a string and returns the same string with an added 'Hi' in front of it (e.g. If you send Jack, it will return 'Hi Jack')
    My Requirement:
    1> I have to do some mechanism in OSB, by which while mapping the message from WFReq_WS to WFRes_WS (through the proxy service I have), it will pick the JMS message (which will be a string/text) and will make a service callout to the Webservice I mentioned using the message as the input parameter of the WebService.
    2>Now when the response of the WebService will come, OSB should send this response as the message in the response queue (WFRes_WS) I mentioned above.
    To simplify the requirement using an example:
    A> I will send a text/String message (say Jack) to the request queue (WFReq_WS)
    B> OSB should pick the message (Jack) and make a service callout to the webservice
    C> webservice will return 'Hi Jack'
    D> OSB should send this to the response queue (WFRes_WS)
    I know the above might look very basic question to the PROs, but please elaborate (step by step) what need to be done, since I do not know OSB.
    Thanks a lot for your help !

    Your example points A and D are easily done by having a "Proxy Service" which has the following details:
    Service Type = Messaging Service
    Request and Response type = Text
    Protocol = jms
    Endpoint URI = your request queue (format like 'jms://localhost:7013/weblogic.jms.XAConnectionFactory/QueueJNDIName')
    Checkmark "response" so that the proxy service automatically delivers the response to another queue - your response queue
    Response URI = jms://localhost:7013/weblogic.jms.XAConnectionFactory/QueueResponse
    Now since your "Hello" webservice is (probably) a SOAP xml service you need to "convert" your text based JMS message to xml before sending it on to the "Hello" service.
    Your JMS proxy can do that by just doing a "Assign <whom>{$body/text()}</whom>" to a variable (lets call it 'reqHello')
    Now your JMS proxy should actually call the Hello service and since your JMS proxy is text and the Hello service is SOAP you cannot just "pass" on to the Hello service in a "Route to". Instead you can do a Service Callout where you can specify your "reqHello" variable as payload and a "respHello" as response variable.
    Now you have the "<whom>Hi jack</whom>" in the response variable and since the JMS response needs to be text format you can "extract" the text value into the body variable of the JMS proxy (use "replace /* in body with $respHello/text()" - replace node contents)
    The actual Hello service is a simple "SOAP" based Proxy Service. Add a pipeline and add a stage in the reponse pipeline. Do a ...
    Assign fn:concat("Hi ",$body/whom/text()) to $whomVar
    Replace whom in body with $whomVar (replace node contents)

  • JMS like content conversion in Seeburger

    Hi,
    Can you have JMS like content conversion in Seeburger?
    In Seeburger adapter if username/password is used, instead of public private keys, can you use JMS like content conversion in Seeburger. (the one which you specify as module parameters)
    Regards,
    Anirudh.

    Depending on what solutions you have: you may use seeburger bic module to convert from csv to xml or other formats. best thing usually is to follow the 2 step mapping strategy of seeburger where bic is doing a non-xml<->xml conversion and the target (XML-) format is mapped to in the SAP Message Mapping.

  • Complex XML to Plain in JMS adapter "Content conversion module"

    Hi!
    I have read the document on "How To… use the content conversion module with XI3.0 J2EE JMS Adapter", and it says only SimpleXML can be converted in the receiver channel.
    I had hoped for a solution at least as good as in the File/ftp adapter, where complex XML can be transformed to files.
    Are there plans to include complex XML conversion in the JMS adapter?
    I can not use the file adapter as I need to change the file name and destination, and that can not be done by adding own module to its single module.
    Any idea how I can achieve what I want?
    To only way I can find, is to create a file using the file/ftp adapter, and then pick it up again and treat all the lines as the same structure (one row = one xml field). Then output this new xml message to file, using the JMS adapter and add any modules with name and destination determination.
    Appreciate any help!
    Regards,
    Oeystein Emhjellen

    Hello,
    Have you tried to use an XSLT mapping within the IE?
    I have, at one customer site, created a XSLT message mapping which converts the  XML to a fixed length ASCII file format. I than added the XSLT message mapping as a second mapping step on the interface mapping.
    In this case I was able to publish a fairly complex fixed length file format to MQ Series via the JMS adapter.
    /Johan

  • JMS/AQ: Setting properties for JMS message using PL/SQL

    I have created a procedure in PL/SQL that uses JMS messages, and now I need to include a property so that the subscriber can use a message selector to filter out unwanted messages. Is this possible using PL/SQL?
    A previous post said: "... But you can have properties in the message payload itself and also define selectors on the message content ...". But I looked at Sun's tutorial and there it said: "A message selector cannot select messages on the basis of the content of the message body."
    I have 300 different screens and messages apply only to one screen at a time. When the user is looking at screen 'A' I want him to only recieve messages that apply to screen 'A'. I thought I would do this with message selector, but is there any other way?
    Here is my code(borrowed from an earlier post)
    PROCEDURE ENQUEUE_JMS_MESSAGE AS
    BEGIN
    DECLARE
    Enqueue_options DBMS_AQ.enqueue_options_t;
    Message_properties DBMS_AQ.message_properties_t;
    Message_handle RAW(16);
    User_prop_array SYS.AQ$_JMS_USERPROPARRAY;
    Agent SYS.AQ$_AGENT;
    Header SYS.AQ$_JMS_HEADER;
    Message SYS.AQ$_JMS_TEXT_MESSAGE;
    Message_text VARCHAR2(100);
    BEGIN
    Agent := SYS.AQ$_AGENT('',NULL,0);
    User_prop_array := SYS.AQ$_JMS_USERPROPARRAY();
    Header := SYS.AQ$_JMS_HEADER( Agent, '', 'aq1', '', '', '', User_prop_array);
    Message_text := 'Message 1 from PL/SQL';
    Message := SYS.AQ$_JMS_TEXT_MESSAGE(Header, LENGTH(Message_text), Message_text, NULL);
    DBMS_AQ.ENQUEUE(queue_name => 'tstopic',
    Enqueue_options => enqueue_options,
    Message_properties => message_properties,
    Payload => message,
    Msgid => message_handle);
    END;
    END;
    -Christer

    Thanks for the answer. I managed to set the Correlation id and retrieve it using getJMSCorrelationID(). But I did not manage to use the MessageSelector on it. I have used the Topicbrowser which is not part of the JMS standard? I tried to enqueue the messages using Java too and tried to use the topicbrowser on both JMSCorrelationID and user defined properties withou success. Is there some special requirements of the TopicBrowser?
    Enumeration messages;
    oracle.jms.TopicBrowser browser =tsess.createBrowser(topic, "TS", "JMSCorrelationID = 'TST'");
    int count = 0;
    messages = browser.getEnumeration();
    if(messages.hasMoreElements())
    System.out.println("message"); //never executed
    dtxtmsg = (TextMessage)(tsub1.receiveNoWait()) ; //returns a message
    String corrID = dtxtmsg.getJMSCorrelationID(); //returns: TST
    Thanks for your help so far...it would really save my day if you have some ideas on this too!
    -Christer

Maybe you are looking for

  • Free goods calculation type

    Hi all, Could you explain for me about the SAP result for free goods like this: I have a condition record for free goods: Min            For            add FG                  Caltype                          Exclusive 1               10 TO         

  • ICloud storage upgrade

    Is the 10GB upgrade for iCloud storage added onto the 5GB free?  Therefore giving one 15GB of storage in iCloud.  - DAMR

  • Hei jeg har nettop kjøpt en iPhone 5 men hvordan får jeg sangene fra min iPad 2 til min iPhone 5?

    Hvordan får jeg sangene jeg har kjøpt på en iPad 2 over til en iPhone 5?

  • HD Multicam Editing

    Hello. I recently shot a performance using 4 HD Cams. One Panasonic HVX200 and 3 Sony Hdr-Fx 7's. The footage from the hvx was loaded onto a hard drive as well as the footage off the sonys. It was all shot 1080i60. My machine cant handle editing the

  • How to trap custom events

    Hello I am writing an addin for GroupWise Where I need to trap the event that the user drags&drops a message(or whatever) from one folder to another. Does this have to be done via a TPH dll, or can it be done completely via a C3PO? (I realize this is