Multiple clients to JMS queue

Hi,
I have created a JMSQueue in Visual administrator and  able to send /receive messages thru JMS send/recr adapter but need clarification on the below requirement.
1) How Can I connect JMSQueue in Visual administrator from external systems without using JMS adapter i.e from another WAS JMS queue/other JMS server which is installed on different machine.
2)How can i connect JMS queue from different clients? Is it possible to post the message into one queue from different clients.
Thanks in advance.
Regards,
Srinivas

Hi Amol,
Thank you very much for your reply.
I need clarification on JMS topics.as per SAP note 856346 (Q.2.1),JMS adapter doen't support JMS topics.
1)Is it possible to send the same message to multiple receivers by using JMS adapter? (JMS supports point-to-point)
2)How do we post the message to one queue from different clients? what are the possible ways to achieve the same?
3)My requirement is: There is a java program , webserver and 100MB size file at source.each time the java program readys say 10MB of data from source file and send it to queue thru webserver and JMS sender adapter reads it from queue and send it to target by using receiver adapter till 100MB data is transfered.Could you please give some idea to achieve this.
Thanks again for your reply.
Regards,
Srinivas

Similar Messages

  • Message Driven Bean reading multiple times from a jms queue

    Hi,
    I am facing a strange problem with my message driven bean. Its configured to read message from a jms queue. But sometimes it read the same message multiple times from the jms queue.
    We are using weblogic server 8.1 sp5.
    Please find below our descriptor files
    ejb-jar.xml  
    <ejb-jar>  
      <display-name>ClarifyCRM_Process_Manager_13.1</display-name>  
      <enterprise-beans>  
        <session>  
          <display-name>ProcessManager</display-name>  
          <ejb-name>ProcessManager</ejb-name>  
          <home>com.clarify.procmgr.ejb.ProcessManagerHome</home>  
          <remote>com.clarify.procmgr.ejb.ProcessManagerRemote</remote>  
          <ejb-class>com.clarify.procmgr.ejb.ProcessManagerEJB</ejb-class>  
          <session-type>Stateless</session-type>  
          <transaction-type>Container</transaction-type>  
        </session>  
        <message-driven>  
          <display-name>ProcessManagerListener</display-name>  
          <ejb-name>ProcessManagerListener</ejb-name>  
          <ejb-class>com.clarify.procmgr.ejb.ProcessManagerMDB</ejb-class>  
          <transaction-type>Bean</transaction-type>  
          <acknowledge-mode>Auto-acknowledge</acknowledge-mode>  
          <message-driven-destination>  
            <destination-type>javax.jms.Queue</destination-type>  
          </message-driven-destination>  
        </message-driven>  
      </enterprise-beans>  
      <assembly-descriptor>  
        <container-transaction>  
          <method>  
            <ejb-name>ProcessManager</ejb-name>  
            <method-name>*</method-name>  
          </method>  
          <trans-attribute>Required</trans-attribute>  
        </container-transaction>  
      </assembly-descriptor>  
    </ejb-jar>  
    weblogic-ejb-jar.xml  
    <weblogic-ejb-jar>  
      <weblogic-enterprise-bean>  
        <ejb-name>ProcessManager</ejb-name>  
        <stateless-session-descriptor>  
          <pool>  
            <max-beans-in-free-pool>100</max-beans-in-free-pool>  
            <initial-beans-in-free-pool>10</initial-beans-in-free-pool>  
          </pool>  
        </stateless-session-descriptor>  
        <enable-call-by-reference>False</enable-call-by-reference>  
        <jndi-name>ProcessManagerHome</jndi-name>  
        <dispatch-policy>PMExecuteQueue</dispatch-policy>  
        <remote-client-timeout>0</remote-client-timeout>  
      </weblogic-enterprise-bean>  
      <weblogic-enterprise-bean>  
        <ejb-name>ProcessManagerListener</ejb-name>  
        <message-driven-descriptor>  
          <pool>  
            <max-beans-in-free-pool>100</max-beans-in-free-pool>  
            <initial-beans-in-free-pool>10</initial-beans-in-free-pool>  
          </pool>  
          <destination-jndi-name>clarify.procmgr.jms.queue.Execution</destination-jndi-name>  
          <connection-factory-jndi-name>clarify.procmgr.jms.factories.ExecConnection</connection-factory-jndi-name>  
        </message-driven-descriptor>  
        <enable-call-by-reference>True</enable-call-by-reference>  
        <dispatch-policy>PMListenerExecuteQueue</dispatch-policy>  
        <remote-client-timeout>0</remote-client-timeout>  
      </weblogic-enterprise-bean>  
    </weblogic-ejb-jar>   The MDB is sometimes reading multiple times from clarify.procmgr.jms.queue.Execution
    Also i would like to add here that the connection factory we are using clarify.procmgr.jms.factories.ExecConnection is having the following properties
    ServerAffinity Enabled=true
    XA connection factory enabled=false.
    Please help me out here!!

    Maybe, your MDB "sometimes" throws an Exception in onMessage.
    Check if this happens when you set <max-beans-in-free-pool>1</max-beans-in-free-pool>.

  • I want to access JMS Queue in websphere from a client application

    Hello all
    I tried to access a jms queue in the websphere from a client application
    my connection factory jndi name is : MyConn
    my queue name jndi name is : MyQueue
    and here is my code :
    Hashtable environment = new Hashtable();
    environment.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.ibm.websphere.naming.WsnInitialContextFactory");
    environment.put(Context.URL_PKG_PREFIXES, "com.ibm.ws.naming");
    environment.put(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");
    return new InitialContext(environment);
    then:
    q = (Queue) ctx.lookup(QJNDIName);
    QueueConnectionFactory connFactory = (QueueConnectionFactory)
    ctx.lookup(ConnFactName);
    I had the following exception :
    javax.naming.NameNotFoundException: Context: networking/nodes/networking/servers/server1, name: MyQueue: First component in name MyQueue not found. Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0
    Can i have any help please ....

    Hi
    You are missing some critical jar files in your class path. It should be namingclient.jar, also please or something similar that is missing in classpath.
    HTH
    VJ

  • HowTo:Publish Msg to JMS queue deployed in a Weblogic Cluster from a client

    Hello All-
    I am new to Weblogic and need help from this forum. Forgive me for my ignorance. I am learning.
    Below is a brief about the context and the issues that we are facing:
    Background
    =======
    1. We have Oracle Service Bus (OSB) installed on top of Oracle Weblogic Server (ver 10.3). In OSB we have developed a proxy service that listens to a JMS queue for an incoming message
    2. The Weblogic environment is a cluster having 2 managed servers listening to different ports and it is front-ended by a Apache Load Balancer.
    3. Our requirement is to post an XML message from a Java client to the JMS queue which will then initiate the proxy service deployed. We are using t3 protocol to post the message from the client to the JMS queue
    Issue
    ====
    1. To post an XML message from the client, how do we give the address of the JMS queue in the clustered environment to enable failover/loadbalancing if one managed server goes down. I understand from your earlier posts in this forum that directly hitting the JMS queue on a particular managed server will not enable failover/loadbalancing in case one of them goes down
    2. Do we need to modify any config file in the Apache Proxy Plugin?
    3. Do we need to provide the address of the Apache proxy in the client to send the message?
    Kindly clarify and let me know me know if you need any additional information.
    Greatly appreciate your help!!!
    Regards,
    Dibya

    Hi Dibya,
    Please refer to : http://weblogic-wonders.com/weblogic/2010/05/13/apache-proxy-as-static-content-repository/#comment-1379
    Thanks
    Jay SenSharma

  • J2EE client mapping in WL6 - continued : jms queues and topics

    How can one use "generic" (i.e. "java:comp/env/jms/myQueue") names in client
    code for jms queues and topics,
    since neither application-client.xml nor WL's myjarname.runtime.xml
    have elements for them ?
    I mean, jms managed objects are not env-entries (application-client.dtd
    specifies that only primitive wrapper types can be valid env-entry-value)
    nor resources (which I understand are all connection factories, for jdbc,
    jms or mail ...).
    In my ejb-jar.xml I use the resource-env-ref element :
    <resource-env-ref>
    <resource-env-ref-name>jms/CreationErrorQueue</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
    </resource-env-ref>
    which can be mapped in weblogic-ejb-jar.xml
    <resource-env-description>
    <res-env-ref-name>jms/CreationErrorQueue</res-env-ref-name>
    <jndi-name>jms.aregon.CreationErrorQueue</jndi-name>
    </resource-env-description>
    but I don't know how to map the jndi of such objects in a client
    application.
    Edo

    Hi Sachin --
    In the 10.1.3.1 release, a set of new commands have been added to admin_client.jar to support the command line creation of JMS resources:
    -addJMSConnectionFactory -domain <domain> -jndiLocation <jndiLocation> [options]
    -removeJMSConnectionFactory -jndiLocation <jndiLocation>
    -getJMSConnectionFactories
    -addDestination -domain <domain> -name <name> -jndiLocation <jndiLocation> [options]
    -removeDestination -name <name> [options]
    -getDestinations
    You can read about it in the doc:
    http://download-west.oracle.com/docs/cd/B31017_01/web.1013/b28950/adminclient.htm#CHDDFJJA
    cheers
    -steve-

  • JMS stand-alone client consuming a queue in GlassFish cluster

    I want to connect to a JMS queue running in clustered glassfish enterprise 2.1 and consume a message. I have a simple client app. that works with my one-machine cluster (pointing it either to first or second node, ports 3330 or 3331), but doesn't work with a company cluster (two machines, two nodes).
            Hashtable properties = new Hashtable();
            properties.put(Context.PROVIDER_URL, "iiop://" + hostname + ":" + port);
            properties.put("org.omg.CORBA.ORBInitialHost", hostname);
            properties.put("org.omg.CORBA.ORBInitialPort", "" + port);
            properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.appserv.naming.S1ASCtxFactory");
            try {
                ctx = new InitialContext(properties);
            } catch (NamingException ex) {
                ex.printStackTrace();
            }The program fails on line ctx = new InitialContext(properties);
    The strange thing is, whatever I use as hostname or port, it always ends like this:
    27.5.2009 18:03:17 com.sun.appserv.naming.RoundRobinPolicy setClusterInstanceInfo
    WARNING: NAM1005 : No Endpoints selected. Please specify using system property com.sun.appserv.iiop.endpoints.
    27.5.2009 18:03:17 com.sun.appserv.naming.RoundRobinPolicy getEndpointForProviderURL
    WARNING: NAM1001: No Endpoints selected in com.sun.appserv.iiop.endpoints property. Using JNDI Provider URL iiop://10.0.0.30:33700 instead
    27.5.2009 18:03:18 com.sun.appserv.naming.RoundRobinPolicy setClusterInstanceInfo
    INFO: endpoint.weight after checking isWeight = 10
    27.5.2009 18:03:18 com.sun.appserv.naming.RoundRobinPolicy setClusterInstanceInfo
    INFO: sumOfAllWeights = 10
    27.5.2009 18:03:19 com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl <init>
    WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700"
    org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2690)
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2711)
            at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:261)
            at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:274)
            at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:130)
            at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:192)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:181)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:325)
            at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112)
            at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)
            at com.sun.corba.ee.impl.folb.ClientGroupManager.getInitialClusterInstanceInfo(ClientGroupManager.java:596)
            at com.sun.corba.ee.impl.folb.ClientGroupManager$GIS.getClusterInstanceInfo(ClientGroupManager.java:620)
            at com.sun.corba.ee.impl.folb.ClientGroupManager.getClusterInstanceInfo(ClientGroupManager.java:666)
            at com.sun.appserv.naming.GroupInfoServiceObserverImpl.membershipChange(GroupInfoServiceObserverImpl.java:73)
            at com.sun.appserv.naming.S1ASCtxFactory.getInitialContext(S1ASCtxFactory.java:290)
            at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
            at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
            at javax.naming.InitialContext.init(InitialContext.java:223)
            at javax.naming.InitialContext.<init>(InitialContext.java:197)
            at client.JmsQueueConsumer.<init>(JmsQueueConsumer.java:41)
            at client.JmsQueueConsumer.main(JmsQueueConsumer.java:57)
    Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect
            at com.sun.enterprise.iiop.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:347)
            at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:244)
            ... 18 more
    Caused by: java.net.ConnectException: Connection refused: connect
            at sun.nio.ch.Net.connect(Native Method)
            at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507)
            at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:105)
            at com.sun.enterprise.iiop.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:332)
            ... 19 moreI've tried to turn off all firewalls between me and the cluster but it still doesn't work. ANy ideas what can be wrong? I guess clusters are always different...
    (I will try to do more investigation, especially packet capturing, later)

    Double check the ORB configuration in the servers...
    +"The default naming service port in the app server is 3700. If the naming service is running on a different port, you'll need to set it via the -Dorg.omg.CORBA.ORBInitialPort property when starting the client JVM. You can double-check the actual naming service port for a given server instance by looking in the server instace's domain.xml for "orb-listener-1". Alternatively, check the Applications..Configuration..ORB..IIOP Listeners section of the admin GUI for orb-listener-1."+
    [https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB|https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB] (step-5)
    Edited by: Conchas on Aug 3, 2009 12:12 PM

  • Problem Connecting to JMS queue with C sharp client

    Hi there,
    I am trying to connect to a JMS queue using a C# client but i have a problem trying to connect. The problem comes in when i run the C# script a dialog box appears requesting a T3TransportFactory.cs which i do not have on the client. and when i close it i get an exception on
    IContext context = ContextFactory.CreateContext(paramMap);
    Exception - Failed to connect using URL <t3://10.103.130.18:7001>
    StackTrace - at WebLogic.Messaging.Physical.T3TransportFactory.CreateT3Transport(IDictionary`2 paramMap) in c:\weblogic\dev\src1032\modules\weblogic-jms-dotnetclient\jmsimpl\src\WebLogic\Messaging\Physical\T3TransportFactory.cs:line 226
    at WebLogic.Messaging.Physical.ContextPhysical.CreateContext(IDictionary`2 paramMap) in c:\weblogic\dev\src1032\modules\weblogic-jms-dotnetclient\jmsimpl\src\WebLogic\Messaging\Physical\ContextPhysical.cs:line 83
    at WebLogic.Messaging.Context.CreateContext(IDictionary`2 paramMap) in c:\weblogic\dev\src1032\modules\weblogic-jms-dotnetclient\jmsimpl\src\WebLogic\Messaging\Context.cs:line 56
    The stacktrace indicates that it is looking for a T3TransportFactory.cs file in that particular path on the client (This is my speculation) but this directory path does not exist on the client machine with the c# code.
    I got a WebLogic.Messaging.dll referenced in my c# project and the ip/port numbers are correct (we know this cause we tried a java client that connected successfully)
    Can anyone assist me on this issue?

    The issue might be the dll file you are referring to. Did you use the dll from the weblogic installation folder (BEA_HOME/modules/com.bea.weblogic.jms.dotnetclient_1.X.X.X).
    Refer - http://docs.oracle.com/cd/E15051_01/wls/docs103/jms_dotnet/install.html#wp1075258
    Hope this helps.
    Thanks,
    Patrick

  • Connecting to multiple JMS queues

    Hi,
    I need to connect to multiple JMS queues that all have different username/passwords however I'm struggling to find where to add these details.
    In the past we have used the args -Dtibco.default.user=xyz -Dtibco.default.password=1234 on the Server Start tab when connecting to a single queue.
    Clearly this won't work for multiple queues.
    I have tried adding the details on the bridge source but it doesn't seem to make any difference. Any ideas?
    Thanks
    Willy

    Hi Willy,
    This is definitely the week for interop questions.
    There are two opportunities that I know of to pass username and password on a bridge source destination. There are the "username" and "password" attributes, which I assume would work in most cases. Not sure. There are also the JNDI properties, presumably via the standard strings "java.naming.security.principal" and "java.naming.security.credentials".
    It would be interesting to see the full stack trace that your getting.
    Tom
    PS. It's been my experience that many applications don't need to use a bridge for retreiving foreign vendor messages as they can simply receive from foreign vendors directly. For example, via a combination of MDBs and the Foreign JMS facility. For more information see [ Integrating Remote JMS Providers | http://download.oracle.com/docs/cd/E12839_01/web.1111/e13727/interop.htm#JMSPG553 ].

  • Multiple Messages in Same JMS queue

    Hello,
    I have interfaces in which different xml messages from the same sender system will be placed in the same MQ queue, is there a way that XI JMS sender channel can differentiate the xml messages based on the payload?
    I can create a single communication channel, but the outbound message interface I cannot create a common structure because the xml messages are huge and there will be future interfaces following the same architecture.
    1. How can I route in interface determination based on the context in the inbound msg interface?
    2. What can I provide as Message interface for the outbound?
    3. MessageSelector attribute in Adapter specific properties - any ideas on this? - I can select this in the condition context in interface determination - can I give any values here to differentiate msges?
    4. Value mapping - is it possible to define the sender message interface through this?
    Any idea is appreciated..THank you..

    Hi Thanujja,
    We have recently completed a project that had this requirement too. We made use of the MessageSelector to solve this problem. You'll need to make use of some advanced (advanced tab)settings in the comm channel. Basically you want to add Additional JMS Message Properties. You can add up to 10 additonal JMS Properties.
    Let's say you've added a property called MESTYP. You then need to get the sender to populate the MESTYP property with a text value for each IDoc involved e.g. DELVRY. You would then set your JMS Message Selector field as follows: MESTYP='DELVRY'.
    You'll have a comm channel for each IDoc. These comm channels will then connect to the JMS Queue & only pick up messages that meet the criteria at set in the Message Selector.
    There was one other problem that encountered with Message Selector, we were on XI version 7.0, the Message Selector was working intermittently & then we applied SAP Note 1256636 & upgraded to 7.01. Everything is working fine after that.
    Trevor

  • Jms queue multiple consumers

    Hi,
    I am new to the JMS queue concept. I have two BPEL processes each having JMS adapter for consuming the data from the same queue. How do i differentiate which consumer consumes which data that is put into the queue. Is there any field in the queue that decides which consumer has to consume the message.
    Just to add to above query, if the message goes to all the consumers, is there any way that i put some logic there to let only the eligible consumer actually process that message.
    It would be helpful if i get any documentation on this.
    Thanks in advance for the Help!
    Edited by: Marius J on Jun 2, 2009 7:38 AM

    Thanks Sahil and JDT. Thanks for the response.
    Sahil,
    I was able to proceed the way u specified. I am using AQ. How do i send the corrid while enqueuing the data in the queue. I am using the following command to enqueue the data.
    CONNECT aq_user/aq_user@tsh9i
    DECLARE
    l_enqueue_options     DBMS_AQ.enqueue_options_t;
    l_message_properties  DBMS_AQ.message_properties_t;
    l_message_handle      RAW(16);
    l_event_msg           AQ_ADMIN.event_msg_type;
    BEGIN
    l_event_msg := AQ_ADMIN.event_msg_type('REPORTER', 1, 2);
    DBMS_AQ.enqueue(queue_name          => 'aq_admin.event_queue',
    enqueue_options     => l_enqueue_options,
    message_properties  => l_message_properties,
    payload             => l_event_msg,
    msgid               => l_message_handle);
    COMMIT;
    END
    But, as per your inputs, we need to send corrid in order to meet my requirement. Can u please guide me regarding this.
    Thanks again
    Regards,
    MJ
    Edited by: Marius J on Jun 4, 2009 7:39 AM

  • JMS queue consumer challenge

    Hi there,
              I have met a pretty challenging problem in JMS queue consumer and
              would like to know if any JMS lovers in the group know about it.
              We have queue receiver listening on queue which contains a number of
              mugs.
              Once a msg is received (onMessage returns), the msg is handed over to
              a worker thread from a thread pool.
              Essentially there are two parts of the problem:
              1. We want kind of flow control - only x number of msg can be
              processed at a given time. This can be resolved by using semaphore.
              However, there might be better solution out there. Anyhow, this is
              less an issue than the second part -
              2. As we know client_acknowledge happens at the session level:
              Acknowledging a consumed message automatically acknowledges the
              receipt of all messages that have been consumed by its session. For
              example, if a message consumer consumes ten messages and then
              acknowledges the fifth message delivered, all ten messages are
              acknowledged. 
              -- this is the problem -- we want to acknowledge each msg
              individually so that only the processed msg is acknowledged although
              there are x number of msg being retrieved. By doing that we won't lost
              any msg in case the JMS client crashes.
              It is a challenge, isn't it? Might well not be one for you, if you
              know the trick. If you do, could you share with us? Thanks a lot.
              Mike
              

    Just to be clear, I favor (2), where each worker thread has its own session and
              consumer.
              This naturally throttles, as there are only as many outstanding messages as
              worker-threads.
              BTW, be aware that it is against spec, and dangerous, to call acknowledge()
              outside of
              onMessage() - as this multi-threads the Session and Session's are not thread
              safe.
              Tom
              Tom Barnes wrote:
              > Actually you both are correct. The ack behavior is configurable on the
              > connection factory via the "AcknowledgePolicy", where the default is
              > what the spec requires (ack-all). Prior to 6.1
              > the behavior was what one would expect (ack-before).
              >
              > As for how to solve the problem at hand. I can think of three approaches:
              >
              > (1) use the current async consumer but set the ack-policy
              > to ack-before, and defer acknowledging a msg until all msgs before
              > it have finished their processing
              >
              > (2) use multiple synchronous consumers, one consumer per defered msg
              >
              > (3) use a single synchronous consumer, but dequeue transactionally,
              > one transaction per msg. suspend the transaction, then have
              > the worker thread resume the transaction once it finishes processing
              > the message and call commit. (Take care that the default
              > tran timeout is 30 seconds.)
              >
              > Shean-Guang Chang wrote:
              >
              > > Just to correct one assumption. Ack the fifth message will not ack message
              > > received after that (e.g. message 6, 7, 8, etc...). At least not WLS JMS.
              > > If this is not true for you please give details of your client code and
              > > version of WLS JMS you have. Thanks!
              > >
              > > "Mike" <[email protected]> wrote in message
              > > news:[email protected]...
              > > > Hi there,
              > > >
              > > > I have met a pretty challenging problem in JMS queue consumer and
              > > > would like to know if any JMS lovers in the group know about it.
              > > >
              > > > We have queue receiver listening on queue which contains a number of
              > > > mugs.
              > > > Once a msg is received (onMessage returns), the msg is handed over to
              > > > a worker thread from a thread pool.
              > > >
              > > > Essentially there are two parts of the problem:
              > > >
              > > > 1. We want kind of flow control - only x number of msg can be
              > > > processed at a given time. This can be resolved by using semaphore.
              > > > However, there might be better solution out there. Anyhow, this is
              > > > less an issue than the second part -
              > > >
              > > > 2. As we know client_acknowledge happens at the session level:
              > > > Acknowledging a consumed message automatically acknowledges the
              > > > receipt of all messages that have been consumed by its session. For
              > > > example, if a message consumer consumes ten messages and then
              > > > acknowledges the fifth message delivered, all ten messages are
              > > > acknowledged.
              > > > -- this is the problem -- we want to acknowledge each msg
              > > > individually so that only the processed msg is acknowledged although
              > > > there are x number of msg being retrieved. By doing that we won't lost
              > > > any msg in case the JMS client crashes.
              > > >
              > > > It is a challenge, isn't it? Might well not be one for you, if you
              > > > know the trick. If you do, could you share with us? Thanks a lot.
              > > >
              > > > Mike
              

  • Distributed JMS Queues and Port Information

    Hello,
              I am a reasonably inexperience WebLogic user, so forgive my ignorance.
              We are setting up a distributed JMS queue as a destination for messages being sent from our EAI server. The distribution will be across 2 servers in our QA environment and 3 servers in our production. We are using WebLogic Server 8.1.3 on an Windows 2003 environment.
              The people in our EAI environment need a port number on for the Queue in order to forward their messages to us. My question's are:
              1) Is the listen port for the Distributed Queue the same as the listen port for the Admin Server?
              2) If it is not, does it correspond to the listen port for the individual queues (which is the same between our environments)?
              3) If there is a third port in play, how does this get configured and where do I retreive this information?
              I appreciate any answers people are willing to give me on the issue.
              Thank you,
              Steven Enk
              Harley-Davidson Motor Company

    Hi Steven,
              WebLogic JMS shares the same WebLogic port as other WebLogic services, regardless of whether or not the destinations are distributed.
              One way to determine which ports are configured for a particular WebLogic server is to look at the log for that server.
              Ports are usually configured to support multiple protocols, and typically, one uses the "t3" protocol for URLs (its the highest performer), but there are other options (such as "http" for tunneling).
              You can configure additional ports (beyond the "default" port(s)) using the "channel" feature - i think you can find channels under the "WebLogic server" tabs on the console.
              For a server or client to establish communication with a remote cluster, one need only specify a URL for any one of the server's within the remote cluster. J2EE JNDI name location transparancy and WebLogic RMI load balancing will usually take care of the rest, although some customers setup DNS to help with load balancing (by for example, configuing their DNS "round-robin" addresses).
              Best practice is for the administrative server to be restricted to administrative purposes only. This means the admin server typically (A) doesn't host JMS (or any other services or any applications) and (B) is not a member of a cluster. So typically you won't be able to access JMS using an admin server's URL.
              Tom

  • Trouble connecting to JMS queue

    I created a JMS queue, but I can not get my client to connect to the queue
    How can I dod this,
    Should I use subdeployments ?
    Thanks, Gideon

    What error is your client getting? If it is a JNDI error, then there's likely a configuration error -- feel free to post your JMS server config (from your config.xml) and your JMS module config.
    As for your question about subdeployments: If you're just experimenting with a simple developer setup, then you don't need subdeployments, otherwise I think one should always use subdeployments for destinations instead of default targeting (where each subdeployment consists of a list of one or more JMS servers), as subdeployments ensure that destinations will only activate on exactly the intended JMS servers. To keep things simple, I recommend configuring a single subdeployment per module (subds are sometimes called "advanced targeting" on the console), and configuring multiple modules when you have multiple target sets...
    Tom

  • JMS/Queue cluster question

              Hi
              I have some very basic cluster questions on JMS Queues. Lets say Q1>I have 3 WLS
              in cluster. I create the queue in only WLS#1 - then all the other WLS (#2 and #3)
              should have a stub in their JNDI tree for the Queue which points to the Queue in
              #1 - right? Basically what I am trying to acheive is to have the queue in one server
              and all the other servers have a pointer to it - I beleive this is possible in WLS
              cluster - right??
              Q2> Is there any way a client to the queue running on a WLS can tell whether the
              Queue handle its using is local (ie in the same server) or remote. Is the API createQueue(./queuename)
              going to help here??
              Q3>Is there any way to create a Queue dynamically - I guess JMX is the answer -right?
              But I will take this question a bit further - lets say Q1 answer is yes. In this
              case if server #1 crashes - then #2 and #3 have no Queues. So if they try to create
              a replica of the Queue (as on server#1) - pointing to the same filestore - can they
              do it?? - I want only one of them to succed in creating the Queue and also the Queue
              should have all the data of the #1 Queue (1 to 1 replica).
              All I want is the concept of primary and secondary queue in a cluster. Go on using
              the primary queue - but if it fails use the 2ndry queue. Kind of HttpSession replication
              concept in clusters. My cluster purpose is more for failover rather than loadbalancing.
              TIA
              Anamitra
              

              Anamitra wrote:
              > Hi Tom
              > 7.0 is definitely an option for me. So lets take the scenarion on case of JMS cluster
              > and 7.0.
              >
              > I do not understand what u mean by HA framework?
              An HA framework is a third party product that can be used to automatically restart a failed server
              (perhaps on a new machine), and that will guarantee that the same server isn't started in two
              different places (that would be bad). There are few of these HA products, "Veritas" is one of
              them. Note that if you are using JMS file stores or transactions, both of which depend on the disk,
              you must make sure that the files are available on the new machine. One approach to this is to use
              what is known as a "dual-ported" disk.
              > If I am using a cluster of 3 WLS
              > 7.0 servers - as u have said I can create a distrubuted Queue with a fwd delay attribute
              > set to 0 if I have the consumer only in one server say server #1.
              > But still if the server #1 goes down u say that the Queues in server #2 and server
              > #3 will not have access to the messages which were stuck in the server #1 Queue when
              > it went down -right?
              Right, but is there a point in forwarding the messages to your consumer's destination if your
              application is down?
              If your application can tolerate it, you may wish to consider allowing multiple instances of it (one
              per physical destination). That way if something goes down, only those messages are out-of-business
              until the application comes back up...
              >
              >
              > Why cant the other servers see them - they all point to the same store right??
              > thanks
              > Anamitra
              >
              Again, multiple JMS servers can not share a store. Nor can multiple stores share a file. That will
              cause corruption. Multiple stores CAN share a database, but can't use the same tables in the
              database.
              Tom
              >
              > Tom Barnes <[email protected]> wrote:
              > >
              > >
              > >Anamitra wrote:
              > >
              > >> Hi
              > >> I have some very basic cluster questions on JMS Queues. Lets say Q1>I
              > >have 3 WLS
              > >> in cluster. I create the queue in only WLS#1 - then all the other WLS
              > >(#2 and #3)
              > >> should have a stub in their JNDI tree for the Queue which points to the
              > >Queue in
              > >> #1 - right?
              > >
              > >Its not a stub. But essentially right.
              > >
              > >> Basically what I am trying to acheive is to have the queue in one server
              > >> and all the other servers have a pointer to it - I beleive this is possible
              > >in WLS
              > >> cluster - right??
              > >
              > >Certainly.
              > >
              > >>
              > >> Q2> Is there any way a client to the queue running on a WLS can tell whether
              > >the
              > >> Queue handle its using is local (ie in the same server) or remote. Is
              > >the API createQueue(./queuename)
              > >> going to help here??
              > >
              > >That would do it. This returns the queue on the CF side of the established
              > >Connection.
              > >
              > >>
              > >> Q3>Is there any way to create a Queue dynamically - I guess JMX is the
              > >answer -right?
              > >> But I will take this question a bit further - lets say Q1 answer is yes.
              > >In this
              > >> case if server #1 crashes - then #2 and #3 have no Queues. So if they
              > >try to create
              > >> a replica of the Queue (as on server#1) - pointing to the same filestore
              > >- can they
              > >> do it??
              > >> - I want only one of them to succed in creating the Queue and also the
              > >Queue
              > >> should have all the data of the #1 Queue (1 to 1 replica).
              > >
              > >No. Not possible. Corruption city.
              > >Only one server may safely access a store at a time.
              > >If you have an HA framework that can ensure this atomicity fine, or are
              > >willing
              > >to ensure this manually then fine.
              > >
              > >>
              > >>
              > >> All I want is the concept of primary and secondary queue in a cluster.
              > >Go on using
              > >> the primary queue - but if it fails use the 2ndry queue. Kind of HttpSession
              > >replication
              > >> concept in clusters. My cluster purpose is more for failover rather than
              > >loadbalancing.
              > >
              > >If you use 7.0 you could use a distributed destination, with a high weight
              > >on the destination
              > >you want used most. Optionally, 7.0 will automatically forward messages
              > >from distr. dest
              > >members that have no consumers to those that do.
              > >
              > >In 6.1 you can emulate a distributed destination this way (from an upcoming
              > >white-paper):
              > >Approximating Distributed Queues in 6.1
              > >
              > >If you wish to distribute the destination across several servers in a cluster,
              > >use the distributed
              > >destination features built into WL 7.0. If 7.0 is not an option, you can
              > >still approximate a simple
              > >distributed destination when running JMS servers in a &#8220;single-tier&#8221;
              > configuration.
              > > Single-tier indicates
              > >that there is a local JMS server on each server that a connection factory
              > >is targeted at. Here is a
              > >typical scenario, where producers randomly pick which server and consequently
              > >which part of the
              > >distributed destination to produce to, while consumers in the form of MDBs
              > >are pinned to a particular
              > >destination and are replicated homogenously to all destinations:
              > >
              > >· Create JMS servers on multiple servers in the cluster. The servers will
              > >collectively host the
              > >distributed queue &#8220;A&#8221;. Remember, the JMS servers (and WL servers) must
              > >be named differently.
              > >
              > >· Configure a queue on each JMS server. These become the physical destinations
              > >that collectively become
              > >the distributed destination. Each destination should have the same name
              > >"A".
              > >
              > >· Configure each queue to have the same JNDI name &#8220;JNDI_A&#8221;, and also
              > take
              > >care to set the destination&#8217;s
              > >&#8220;JNDINameReplicated&#8221; parameter to false. The &#8220;JNDINameReplicated&#8221;
              > parameter
              > >is available in 7.0, 6.1SP3
              > >or later, or 6.1SP2 with patch CR061106.
              > >
              > >· Create a connection factory, and target it at all servers that have a
              > >JMS server with &#8220;A&#8221;.
              > >
              > >· Target the same MDB pool at each server that has a JMS server with destination
              > >&#8220;A&#8221;, configure its
              > >destination to be &#8220;JNDI_A&#8221;. Do not specify a connection factory URL
              > when
              > >configuring the MDB, as it can
              > >use the server&#8217;s default JNDI context that already contains the destination.
              > >
              > >· Producers look up the connection factory, create a connection, then a
              > >session as usual. Then producers
              > >look up the destination by calling javax.jms.QueueSession.createQueue(String).
              > > The parameter to
              > >createQueue requires a special syntax, the syntax is &#8220;./<queue name>&#8221;,
              > so
              > >&#8220;./A&#8221; works in this example.
              > >This will return a physical destination of the distributed destination that
              > >is local to the producer&#8217;s
              > >connection. This syntax is available on 7.0, 6.1SP3 or later, and 6.1SP2
              > >with patch CR072612.
              > >
              > >This design pattern allows for high availability, as if one server goes
              > >down, the distributed destination
              > >is still available and only the messages on that one server become unavailable.
              > > It also allows for high
              > >scalability as speedup is directly proportional to the number of servers
              > >on which the distributed
              > >destination is deployed.
              > >
              > >
              > >
              > >>
              > >> TIA
              > >> Anamitra
              > >
              > >
              > ><!doctype html public "-//w3c//dtd html 4.0 transitional//en">
              > ><html>
              > >Anamitra wrote:
              > ><blockquote TYPE=CITE>Hi
              > ><br>I have some very basic cluster questions on JMS Queues. Lets say Q1>I
              > >have 3 WLS
              > ><br>in cluster. I create the queue in only WLS#1 - then all the other WLS
              > >(#2 and #3)
              > ><br>should have a stub in their JNDI tree for the Queue which points to
              > >the Queue in
              > ><br>#1 - right?</blockquote>
              > >Its not a stub. But essentially right.
              > ><blockquote TYPE=CITE>Basically what I am trying to acheive is to have
              > >the queue in one server
              > ><br>and all the other servers have a pointer to it - I beleive this is
              > >possible in WLS
              > ><br>cluster - right??</blockquote>
              > >Certainly.
              > ><blockquote TYPE=CITE>
              > ><br>Q2> Is there any way a client to the queue running on a WLS can tell
              > >whether the
              > ><br>Queue handle its using is local (ie in the same server) or remote.
              > >Is the API createQueue(./queuename)
              > ><br>going to help here??</blockquote>
              > >That would do it. This returns the queue on the
              > >CF side of the established Connection.
              > ><blockquote TYPE=CITE>
              > ><br>Q3>Is there any way to create a Queue dynamically - I guess JMX is
              > >the answer -right?
              > ><br>But I will take this question a bit further - lets say Q1 answer is
              > >yes. In this
              > ><br>case if server #1 crashes - then #2 and #3 have no Queues. So if they
              > >try to create
              > ><br>a replica of the Queue (as on server#1) - pointing to the same filestore
              > >- can they
              > ><br>do it?? <br>
              > >- I want only one of them to succed in creating the Queue and also the
              > >Queue
              > ><br>should have all the data of the #1 Queue (1 to 1 replica).</blockquote>
              > >No. Not possible. Corruption city.
              > ><br>Only one server may safely access a store at a time.
              > ><br>If you have an HA framework that can ensure this atomicity fine, or
              > >are willing
              > ><br>to ensure this manually then fine.
              > ><blockquote TYPE=CITE>
              > ><p>All I want is the concept of primary and secondary queue in a cluster.
              > >Go on using
              > ><br>the primary queue - but if it fails use the 2ndry queue. Kind of HttpSession
              > >replication
              > ><br>concept in clusters. My cluster purpose is more for failover rather
              > >than loadbalancing.</blockquote>
              > >If you use 7.0 you could use a distributed destination, with a high weight
              > >on the destination
              > ><br>you want used most. Optionally, 7.0 will automatically
              > >forward messages from distr. dest
              > ><br>members that have no consumers to those that do.
              > ><p><i>In 6.1 you can emulate a distributed destination this way (from an
              > >upcoming white-paper):</i>
              > ><br><i>Approximating Distributed Queues in 6.1</i><i></i>
              > ><p><i>If you wish to distribute the destination across several servers
              > >in a cluster, use the distributed destination features built into WL 7.0.
              > >If 7.0 is not an option, you can still approximate a simple distributed
              > >destination when running JMS servers in a &#8220;single-tier&#8221; configuration.
              > >Single-tier indicates that there is a local JMS server on each server that
              > >a connection factory is targeted at. Here is a typical scenario,
              > >where producers randomly pick which server and consequently which part
              > >of the distributed destination to produce to, while consumers in the form
              > >of MDBs are pinned to a particular destination and are replicated homogenously
              > >to all destinations:</i><i></i>
              > ><p><i>· Create JMS servers on multiple servers in the cluster.
              > >The servers will collectively host the distributed queue &#8220;A&#8221;. Remember,
              > >the JMS servers (and WL servers) must be named differently.</i><i></i>
              > ><p><i>· Configure a queue on each JMS server. These become
              > >the physical destinations that collectively become the distributed destination.
              > >Each destination should have the same name "A".</i><i></i>
              > ><p><i>· Configure each queue to have the same JNDI name &#8220;JNDI_A&#8221;,
              > >and also take care to set the destination&#8217;s &#8220;JNDINameReplicated&#8221;
              > parameter
              > >to false. The &#8220;JNDINameReplicated&#8221; parameter is available in
              > >7.0, 6.1SP3 or later, or 6.1SP2 with patch CR061106.</i><i></i>
              > ><p><i>· Create a connection factory, and target it at all servers
              > >that have a JMS server with &#8220;A&#8221;.</i><i></i>
              > ><p><i>· Target the same MDB pool at each server that has a JMS server
              > >with destination &#8220;A&#8221;, configure its destination to be &#8220;JNDI_A&#8221;.
              > >Do not specify a connection factory URL when configuring the MDB, as it
              > >can use the server&#8217;s default JNDI context that already contains the destination.</i><i></i>
              > ><p><i>· Producers look up the connection factory, create a connection,
              > >then a session as usual. Then producers look up the destination by
              > >calling javax.jms.QueueSession.createQueue(String). The parameter
              > >to createQueue requires a special syntax, the syntax is &#8220;./<queue name>&#8221;,
              > >so &#8220;./A&#8221; works in this example. This will return a physical
              > >destination of the distributed destination that is local to the producer&#8217;s
              > >connection. This syntax is available on 7.0, 6.1SP3 or later,
              > >and 6.1SP2 with patch CR072612.</i><i></i>
              > ><p><i>This design pattern allows for high availability, as if one server
              > >goes down, the distributed destination is still available and only the
              > >messages on that one server become unavailable. It also allows
              > >for high scalability as speedup is directly proportional to the number
              > >of servers on which the distributed destination is deployed.</i>
              > ><br><i></i>
              > ><br><i></i>
              > ><blockquote TYPE=CITE>
              > ><br>TIA
              > ><br>Anamitra</blockquote>
              > ></html>
              > >
              > >
              

  • Unable to read from JMS queue on Solaris

    Hi all,
    I am experiencing a strange issue with JMS and Oracle 10gR2 (single server) on Solaris.
    The design is simple, 1 server multiple clients communication via 2 queues (P2P domain). Each client has a session ID and can read messages from the queue that have been tagged with the proper session ID.
    I guess is simpler to show the code involved:
    @Override
    public void becomeSender(String queueName) throws JMSException {
    setDestination(((AQjmsSession) getSession()).getQueue(null, queueName));
    ((AQjmsDestination) getDestination()).start(getSession(), true, true);
    setProducer(((AQjmsSession) getSession()).createSender((Queue) getDestination()));
    getProducer().setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    @Override
    public void becomeReceiver(String queueName, String sessionID) throws JMSException, JMSConnectorException {
    setDestination(((AQjmsSession) getSession()).getQueue(null, queueName));
    ((AQjmsDestination) getDestination()).start(getSession(), true, true);
    setConsumer(((AQjmsSession) getSession()).createReceiver((Queue) getDestination(), getReceiverSessionPredicate(sessionID)));
    getConnection().start();
    public static final String jmsReceiverSessionProperty = "msgReceiverSession";
    public static final String jmsSenderSessionProperty = "msgSenderSession";
    public static String getReceiverSessionPredicate(String sessionID) throws JMSConnectorException {
    if (sessionID == null) {
    throw new JMSConnectorException("Session ID must be provided!");
    return jmsReceiverSessionProperty + " = '" + sessionID + "' OR " + jmsReceiverSessionProperty + " = '" + TransferMessage.TARGET_ANY_RECEIVER + "'";
    and the code that sends the message
    public void sendMessage(TransferMessage aMessage) throws JMSException, IOException {
    BytesMessage aMsg = createBytesMessage();
    aMsg.setStringProperty(jmsReceiverSessionProperty, aMessage.getReceiverSessionID());
    aMsg.setStringProperty(jmsSenderSessionProperty, getSessionID());
    sendMessage(aMsg);
    Everything works great in Windows XP/7/2008 server 64 virtual machine or not but it fails in Solaris.
    The messages are written to the queue as I can see them in the queue table but they never get read from the queue...Oh I missed a bit of information, I use onMessage to handle new message on queues.
    The Solaris server is at client environment and I have no remote access to it.
    I can run my my simple connectivity tests on a Solaris instance if anyone care to provide me with credentials and 2 queues or even better I can send the jars to run on local environment.
    Any help would be much appreciated. Thanks,
    Eddie

    Moderator Action:
    This post has been moved from the Java Message Service (JMS),
    to the suggested Database Advanced Queuing forum, for closer topic alignment.

Maybe you are looking for

  • How can i see PDF files in Nokia 5230

    How can i see PDF files in Nokia 5230

  • Manual BRS configuration.

    Dear Friends, I have customized Manual bank statement and it is working fine ?  But my problem is when ever i process Batch input session it is only posting the following entry Main bank   dr... checks incoming Cr but it is not clearing customer open

  • Can I use DBTableOraDataSourceLoginModule with OC4J/OAS 10.1.3.0  ?

    Hi, I am implementing security as described in Frank's docs : http://www.oracle.com/technology/products/jdev/howtos/1013/oc4jjaas/oc4j_jaas_login_module.htm I am using JDeveloper 10.1.3.1 and OC4J 10.1.3.0 / OAS 10.1.3.0. The question is : 1) Will DB

  • DPA File names in Cache

    Hi everyone, I have noticed while rendering a pdf, Docupresentment copies the DPA file to a cache folder and generates a PDF out of it in the cache itself. I see the DPA file name has some characters suffixed to the actual DPA file name, the same DPA

  • Trim date in database

    hi all how to convert this type of date dd/mm/yyyy to yyyyyddmm ...cause my database read as yyyyyddmm , how to trim it....