Using distributed queues and factories in a weblogic cluster

Hi all,
in our environment we have a domain which has two machines. One is running the AdminServer and Node1 and the 2nd machine is running Node2.
For each Node I have created a JMS Server and a corresponding file store located at each machine.
I've also created a JMS Module containing our required queues, factories and topics. Queues and Topics are of the Uniform Distributed type.
I've targeted this module at the cluster and experimented with creating a subdeployment. But from what I recon, since all my resources have default targeting
enabled, a subdeployment is not required, they target what is targeted by the JMS Module, right?
However I get an exception when both nodes are up:
<Nov 4, 2008 11:47:01 AM EET> <Warning> <JMS> <BEA-040498> <An error occurred while forwarding a message for distributed destination member       
MyJMSModule!MyJMSServer@myTopic: weblogic.messaging.dispatcher.DispatcherException: java.rmi.RemoteException: Couldn't connect to weblogic.rjvm.RJVMImpl@187766d - id: '-1415064081927280896S:10.0.0.5:
[7001,7001,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain        :NodeApp2' connect time: 'Tue Nov 04 11:47:01 EET 2008' - it is likely that the connection has already been shut down; nested exception is:
5564732         java.rmi.ConnectException: Couldn't connect to weblogic.rjvm.RJVMImpl@187766d - id: '-1415064081927280896S:10.48.92.70:[7001,7001,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain:NodeApp2'
connect time: 'Tue Nov 04 11:47:01 EET 2008' - it is likely that the connection has already been shut downThe two nodes are up and running and the node managers as well. Is this the correct way to create the queues and topics for a clustered environment?
Thanks
Edited by: dvm on Nov 4, 2008 3:12 AM

I've done the steps but the problem still persists. I don't know if I had this before, but now both machines can't see each other.
From Node1 logs *.out file:
<Warning> <JMS> <BEA-040498> <An error occurred while forwarding a message for distributed destination member MyJMSModule!MyJMSServer2@my_cacheTopic:
weblogic.messaging.dispatcher.DispatcherException: java.rmi.RemoteException:
Couldn't connect to weblogic.rjvm.RJVMImpl@62017d - id: '4786464166486913267S:10.48.92.70:[7001,7001,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain:NodeApp2'
connect time: 'Wed Nov 05 16:03:53 EET 2008' - it is likely that the connection has already been shut down; nested exception is:
java.rmi.ConnectException: Couldn't connect to weblogic.rjvm.RJVMImpl@62017d - id: '4786464166486913267S:10.48.92.70:[7001,7001,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain:NodeApp2'
connect time: 'Wed Nov 05 16:03:53 EET 2008' - it is likely that the connection has already been shut downand from Node2 logs *.out file:
<Warning> <JMS> <BEA-040498> <An error occurred while forwarding a message for distributed destination member MyJMSModule!MyJMSServer1@my_cacheTopic:
weblogic.messaging.dispatcher.DispatcherException: java.rmi.RemoteException:
Couldn't connect to weblogic.rjvm.RJVMImpl@24b64a - id: '-788798942991630857S:10.48.92.69:[7003,7003,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain:NodeApp1'
connect time: 'Wed Nov 05 16:03:59 EET 2008' - it is likely that the connection has already been shut down; nested exception is:
java.rmi.ConnectException: Couldn't connect to weblogic.rjvm.RJVMImpl@24b64a - id: '-788798942991630857S:10.48.92.69:[7003,7003,-1,-1,-1,-1,-1]:app1:7003,app2:7001:my_domain:NodeApp1'
connect time: 'Wed Nov 05 16:03:59 EET 2008' - it is likely that the connection has already been shut downThis happens just after the managed servers have been started with the application previously deployed.

Similar Messages

  • Issue with Distributed Queue and WebLogic Clustering

    Hi, When a message is received by distributed queue, MDB is processing the message on two managed servers. There seems to be issue with clustering and the physical queues present on both the managed servers are receving the message.
    Our environment configuration details are as below:
    One Web logic Cluster with 2 nodes (2 managed web logic servers).
    One MDB deployed on the cluster listening to a queue with JNDI name “xng/jms/CODEventsQueue”
    One Distributed queue with two members on the two nodes of the cluster, and with JNDI name “xng/jms/CODEventsQueue”
    Two members of the distributed queue deployed on two JMS servers, which are separately deployed on each managed server .
    And the distributed queue is deployed on the cluster.
    Any help is appreciated.
    Thanks
    Sampath

    It is not clear to me how you concluded that "both the managed servers are receiving the message". Did you monitor the queues' statistics, or did you see both MDB instances received the same message?
    It looks like that you using a weighted distributed queue. Do the two physical queues that compose the distributed queue have their own JNDI names? If so, what are they?
    Have you tried to use a uniform distributed queue and see if the same behavior shows up?
    You can find more about uniform distributed destination at
    http://edocs.bea.com/wls/docs103/jms/dds.html#wp1313713
    BTW, which WebLogic Server releases are you using? Could you provide the distributed queue configuration?
    Thanks,
    Dongbo

  • Creating a MDB and Distributed Queue in Clustered env in weblogic 9.2

    I have created 3 managed servers and all these managed servers are in the cluster.
              Now i create JMS module for this cluster and create the Connection factory 'QUEUE_CF_8' and distributed Queue 'DIS_QUEUE_8' targeting to the cluster.
              I create a MDB and JMS client and deploy them in the cluster.JMS client sends the message to the distributed queue and MDB is listening to the distributed queue
              When i deploy the MDB , it is deploys perfectly . But when i run the client it fails with the following exception
              [java] javax.naming.NameNotFoundException: Unable to resolve 'QUEUE_CF_8'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Unable to resolve 'QUEUE_CF_8'. Resolved '']; remaining name 'QUEUE_CF_8'
              When i view the JNDI tree for all the managed servers , i can see the Connection factory and the distributed queue.
              Also i deploy the MDB to the cluster and no submoduletargets are specified.
              Let me know what is that iam missing.

    <?xml version='1.0' encoding='UTF-8'?>
              <weblogic-jms xmlns="http://www.bea.com/ns/weblogic/90" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls" xsi:schemaLocation="http://www.bea.com/ns/weblogic/920 http://www.bea.com/ns/weblogic/920.xsd">
              <connection-factory name="Queue_CF_8">
              <sub-deployment-name>Server_group_4</sub-deployment-name>
              <jndi-name>QUEUE_CF_8</jndi-name>
              <security-params>
              <attach-jmsx-user-id>false</attach-jmsx-user-id>
              </security-params>
              </connection-factory>
              <uniform-distributed-queue name="DIS_QUEUE_8">
              <sub-deployment-name>Server_group_4</sub-deployment-name>
              <jndi-name>DIS_QUEUE_8</jndi-name>
              <load-balancing-policy>Round-Robin</load-balancing-policy>
              </uniform-distributed-queue>
              </weblogic-jms>
              But the problem was with the clustering.
              Thanks for your time..

  • When to use IN Queue and When to use OUT Queue

    The architecture that we have is Client publishes the EDI 272 data to FTPS Server. We have ESB configured to pick the EDI data from FTP location, construct the B2B Header message and send to B2B. The B2B translates the EDI raw data to EDI XML. BPEL reads the EDI XML data from B2B. I have doubt here in using the IP_IN_QUEUE and IP_OUT_QUEUE. As per my understanding, IP_IN_QUEUE is used for messages inbound to B2B and IP_OUT_QUEUE is used for messages going out of B2B. If this is correct, ESB module would publish to IP_IN_QUEUE and BPEL would pick from IP_OUT_QUEUE.
    I'm confused here because I read few examples in which the queues were used other way around.
    Kindly clarify whether the usage of IN and OUT queus are correct.
    Thanks,
    Mani

    HI Mani,
    When B2B receives an inbound message from trading partner, it will send to IP_IN_QUEUE.
    When Back application wants to send a message to B2B, Backend application has to send the message to IP_OUT_QUEUE. B2B picks up the message from IP_OUT_QUEUE and send it to trading partner.
    The above mentioned queues are shipped with the product. However, users can can create there own queues.
    Thanks and Reagrds,
    Prasanna

  • Messages in Distributed Queue remain on one JMSServer in Cluster

    Hi,
              the situation is as follows:
              We're having Distributed Queues on a two-Node server setup. A queue therefore exists two times, once on each JMSServer on each node.
              Forward-Delay has been set on the DistibutedQueue to value 1 second (we tested with values 0 and 10, too).
              External Java client (both cluster nodes in the provider_url for initialcontext) connects to the DistributedQueue and sends messages. In the weblogic console you can see these messages on the physical queue on the JMSServer, let's call it QueueA on NodeA.
              An external java process to consume messages (again both clusters nodes in the jndi-connection-string) is started to consume messages. Because of round-robin it sometimes get's connections to QueueB (part of same DistributedQueue as QueueA, but on the other node in the cluster).
              When connected to QueueB on NodeB no single message is received. You can even see in the weblogic console that QueueA on NodeA has zero consumers and 50 messages, QueueB on NodeB has zero messages but one consumer.
              When we restart the consumer java process and it randomly get's connected to QueueA on NodeA it consumes fine, as it should.
              Should'nt Forward-Delay do exactly this? Transport messages from QueueA on NodeA with zero consumers to QueueB on NodeB which actually has consumers?
              Any help would be appreciated.
              Axel van Lil

    Hi,
              thanks for your answer. We opened a support case today for this issue... I don't know. Cluster seems to run fine, no warnings, no exceptions.
              The next step of this issue is the following (just to give an idea of our upcoming problems :-)
              External Java process listens on QueueA on NodeA (QueueA is part of a Distributed Queue). Currently receives all the messages located on that queue. We kill NodeA on that machine to simulate failover.
              The external process failovers immediately to NodeB (which is good! proven by netstat and debugger) but just doesn't receive messages even though there are messages in that queue! It seems that the new consumer is just being forgotten by the BEA server.
              I don't know... somehow our configuration is quirked... or the BEA implementation doesn't work at all...
              Rgds,
              Axel

  • Not able to start Managed server using nohup command and failed to authenticate weblogic user

    Hi,
    I stopped weblogic Admin server, managed server and opmnctl. and restarted Admin server successfully but I'm able to start managed start without nohup command. if I use nohup command then it's not able to get authenticate and faild to start managed server. I created boot.property file with weblogic user name and password still not working. is there anyother way to suppy login credentials for managed server?
    how can I supply login credentials in below command?
    nohup ./startManagedWebLogic.sh bi_server1 t3://machine:7001 > bis1_startup.log &
    Appreciate you for your help
    Thanks
    Jay.

    /app/obiee_11g/Oracle_BI1/jdk/bin/java -server -Xms256m -Xmx1024m -XX:MaxPermSize=512m -XX:-UseSSE42Intrinsics -Dweblogic.Name=bi_server1 -Djava.security.policy=/app/obiee_11g/wlserver_10.3/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Dweblogic.security.SSL.trustedCAKeyStore=/app/obiee_11g/wlserver_10.3/server/lib/cacerts -da -Dplatform.home=/app/obiee_11g/wlserver_10.3 -Dwls.home=/app/obiee_11g/wlserver_10.3/server -Dweblogic.home=/app/obiee_11g/wlserver_10.3/server -Dcommon.components.home=/app/obiee_11g/oracle_common -Djrf.version=11.1.1 -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger -Ddomain.home=/app/obiee_11g/user_projects/domains/bifoundation_domain -Djrockit.optfile=/app/obiee_11g/oracle_common/modules/oracle.jrf_11.1.1/jrocket_optfile.txt -Doracle.server.config.dir=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig/servers/bi_server1 -Doracle.domain.config.dir=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig -Digf.arisidbeans.carmlloc=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig/carml -Digf.arisidstack.home=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig/arisidprovider -Doracle.security.jps.config=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig/jps-config.xml -Doracle.deployed.app.dir=/app/obiee_11g/user_projects/domains/bifoundation_domain/servers/bi_server1/tmp/_WL_user -Doracle.deployed.app.ext=/- -Dweblogic.alternateTypesDirectory=/app/obiee_11g/oracle_common/modules/oracle.ossoiap_11.1.1,/app/obiee_11g/oracle_common/modules/oracle.oamprovider_11.1.1 -Djava.protocol.handler.pkgs=oracle.mds.net.protocol -Dweblogic.jdbc.remoteEnabled=false -Dbi.oracle.home=/app/obiee_11g/Oracle_BI1 -DEPM_ORACLE_HOME=/app/obiee_11g/Oracle_BI1 -Dweblogic.MaxMessageSize=50000000 -DEPM_ORACLE_HOME=/app/obiee_11g/Oracle_BI1 -DHYPERION_HOME=/app/obiee_11g/Oracle_BI1 -DEPM_ORACLE_INSTANCE=novalue -Dhyperion.home=/app/obiee_11g/Oracle_BI1 -DEPM_REG_PROPERTIES_PATH=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/fmwconfig -Depm.useApplicationContextId=false -Doracle.biee.search.bisearchproperties=/app/obiee_11g/Oracle_BI1/bifoundation/jee/BISearchConfig.properties -Dweblogic.management.clearTextCredentialAccessEnabled=true -Doracle.notification.filewatching.interval=2000 -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dweblogic.security.SSL.enableJSSE=true -Dfile.encoding=utf-8 -Doracle.ecsf.security.service=oracle.biee.search.security.BISearchSecurityService -Doracle.ecsf.configuration.class=oracle.biee.search.services.BISearchServiceConfiguration -Dxdo.server.config.dir=/app/obiee_11g/user_projects/domains/bifoundation_domain/config/bipublisher -DXDO_FONT_DIR=/app/obiee_11g/Oracle_BI1/common/fonts -Drtd.instanceName=RTD_bi_server1 -Dem.oracle.home=/app/obiee_11g/oracle_common -Djava.awt.headless=true -Dweblogic.management.discover=false -Dweblogic.management.server=01scqabi01.natusmed.natus.com:7001 -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw.logErrorsToConsole=false -Dweblogic.ext.dirs=/app/obiee_11g/patch_wls1035/profiles/default/sysext_manifest_classpath weblogic.Server
    <Nov 17, 2013 12:24:00 AM PST> <Info> <Security> <BEA-090905> <Disabling CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true>
    <Nov 17, 2013 12:24:00 AM PST> <Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG to FIPS186PRNG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true>
    <Nov 17, 2013 12:24:01 AM PST> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) 64-Bit Server VM Version 20.10-b01 from Sun Microsystems Inc.>
    <Nov 17, 2013 12:24:07 AM PST> <Info> <Security> <BEA-090065> <Getting boot identity from user.>
    Enter username to boot WebLogic server:Error: Failed to get value from Standard Input
    Enter password to boot WebLogic server:
    <Nov 17, 2013 12:24:07 AM PST> <Info> <Management> <BEA-141107> <Version: WebLogic Server 10.3.5.0 Fri Apr 1 20:20:06 PDT 2011 1398638 >
    <Nov 17, 2013 12:24:09 AM PST> <Error> <Configuration Management> <BEA-150021> <The admin server failed to authenticate the identity of the user starting the managed server. The reason for the error is .>
    <Nov 17, 2013 12:24:09 AM PST> <Emergency> <Management> <BEA-141151> <The admin server could not be reached at http://01scqabi01.natusmed.natus.com:7001.>
    <Nov 17, 2013 12:24:09 AM PST> <Info> <Configuration Management> <BEA-150018> <This server is being started in managed server independence mode in the absence of the admin server.>
    <Nov 17, 2013 12:24:09 AM PST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
    <Nov 17, 2013 12:24:09 AM PST> <Info> <WorkManager> <BEA-002900> <Initializing self-tuning thread pool>
    <Nov 17, 2013 12:24:09 AM PST> <Notice> <Log Management> <BEA-170019> <The server log file /app/obiee_11g/user_projects/domains/bifoundation_domain/servers/bi_server1/logs/bi_server1.log is opened. All server side log events will be written to this file.>
    <Nov 17, 2013 12:24:19 AM PST> <Notice> <Security> <BEA-090082> <Security initializing using security realm myrealm.>
    <Nov 17, 2013 12:24:20 AM PST> <Critical> <Security> <BEA-090403> <Authentication for user denied>
    <Nov 17, 2013 12:24:20 AM PST> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: weblogic.security.SecurityInitializationException: Authentication for user denied
    weblogic.security.SecurityInitializationException: Authentication for user denied
    at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.doBootAuthorization(CommonSecurityServiceManagerDelegateImpl.java:965)
    at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.initialize(CommonSecurityServiceManagerDelegateImpl.java:1050)
    at weblogic.security.service.SecurityServiceManager.initialize(SecurityServiceManager.java:873)
    at weblogic.security.SecurityService.start(SecurityService.java:141)
    at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
    Truncated. see log file for complete stacktrace
    Caused By: javax.security.auth.login.FailedLoginException: [Security:090304]Authentication Failed: User javax.security.auth.login.LoginException: [Security:090301]Password Not Supplied
    at weblogic.security.providers.authentication.LDAPAtnLoginModuleImpl.login(LDAPAtnLoginModuleImpl.java:261)
    at com.bea.common.security.internal.service.LoginModuleWrapper$1.run(LoginModuleWrapper.java:110)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.bea.common.security.internal.service.LoginModuleWrapper.login(LoginModuleWrapper.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    Truncated. see log file for complete stacktrace
    >
    <Nov 17, 2013 12:24:20 AM PST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FAILED>
    <Nov 17, 2013 12:24:20 AM PST> <Error> <WebLogicServer> <BEA-000383> <A critical service failed. The server will shut itself down>
    <Nov 17, 2013 12:24:20 AM PST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FORCE_SHUTTING_DOWN>

  • Diff. between using inbound queue and outbound queue.

    Hello All,
    Can somebody please explain me the diff. between using inbound and outbound queue?Thanks.
    Best Regards,
    Tushar

    Hi Tushar,
    I hope you will find the answers here:
    /people/somnath.manna/blog/2006/12/21/demystifying-cif
    /people/somnath.manna/blog/2006/12/31/demystifying-cif--part-ii
    Regards
    Alper

  • Issue Undeploying and Deployment Application in Weblogic Cluster

    We have a production environment wich has one cluster with 40 servers in it. The problems lies when we select one application to undeploy. Weblogic response in administration console says that the undeploy is finished, but when I try to deploy another version of the application it only affect one of the 40 servers of the cluster, the other 39 servers are still with the old version of the application in memory.
    If I restart all the servers it works and all the 40 server get the new version of the application.
    Now we want to do continuous deployment and scripting all the deploy process and we don't want to restart all the 40 servers every deploy.
    Is there any limit of servers in a cluster? I'm saying this because it didin't occur in the stage environment with one cluster with 5  managed servers.
    Do I need any specific node manager configuration to undeploy this 40 managed servers?
    I look in the internet and didin't find any issues related to this.

    Sharmela,
    Looks like the undeploy command did not clean up the stage directories of the managed server properly.
    There is no limit on the number of managed servers in a cluster or in a domain. But again you need to plan the number based on the hardware and memory settings.
    We have two hexalogics, the problem here is not hardware.
    Do I need any specific node manager configuration to undeploy this 40 managed servers?
    What exactly you mean by undeploying managed server ?  You want to remove them or  bring them down ?
    Sorry about that, I want to know what should I do to undeploy the application properly in the 40 managed servers(not bringing them down). I've heard something about staging mode but i've already tried to put ---nostage paramenter and the result was the same.
    Do you have any clue why weblogic is not cleaning the stage directories? Is there any way to force it without restarting all the servers?
    Thank you very much,
    Gustavo

  • Can distributed queues be implemented in weblogic 6.1

              hi,
              i am currently using weblogic 6.1 with 3 machines on a cluster.when using jms
              there seems to be no way to use distributed queues on the machine.this feature
              is however supported in weblogic 7.0.is there any workaround for this.this wuld
              essentially mean a single point of failure as the queue wuld be present on only
              1 wlserver and the other 2 servers though in cluster wuldnt have any reference
              to this queue..
              any help???
              

    The JMS Performance Guide white-paper contains examples
              of doing exactly this. You can find it here:
              http://dev2dev.bea.com/technologies/jms/index.jsp
              Illusionz wrote:
              > hi,
              > i am currently using weblogic 6.1 with 3 machines on a cluster.when using jms
              > there seems to be no way to use distributed queues on the machine.this feature
              > is however supported in weblogic 7.0.is there any workaround for this.this wuld
              > essentially mean a single point of failure as the queue wuld be present on only
              > 1 wlserver and the other 2 servers though in cluster wuldnt have any reference
              > to this queue..
              > any help???
              

  • How to process one message at a time on a distributed queue

    I have a situation where I need to execute/process a task of a type
              asynchronously and this should be done one at a time. To do that I am thinking of setting
              up a distributed queue (for load balancing and failover). Now I have
              this requirement that only one task should be processed at one time. So
              for example if two messages (m1 followed by m2) are sent to distributed
              queue and I have the distributed queue which points to two physical
              queues on two different instances of weblogic(wl1 and wl2), the
              distributed queue will likely send m1 to wl1 and m2 to wl2 (assuming
              distributed queue is setup with round robin policy). If m1 has started
              executing/processing in my MDB on wl1, I do not want start processing
              m2 on wl2 untill m1 has been processed by wl1. Is it possible to do
              this on weblogic 8.1 JMS?
              If this is not supported I was thinking of implementing a database
              based locking framework and each mdb will use that framework to check
              if a task of a particular type is being processed before processing a
              new task. Also in this case I will need to use max. 1 mdb for each
              queue on each weblogic server.
              --Navjeet                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    Hello navjeet,
              I don't think there are any parameters that you can set on a distributed queue to ensure messages are handled in the sequential manner you describe so it looks like you will have to implement your own locking mechanism.
              In reposponse to your other question you can set the number of MDbeans in the free pool to 1 (or the number of queues you have) in the MDBean deployment descriptor.
              see:
              http://e-docs.bea.com/wls/docs81/ejb/message_beans.html#1120592
              Cheers,
              Hoos

  • Distributed queue usage with custom queue listeners in cluster

    Hi,
    Can someone help in solving the issue. We have a web application which will create consumers(threads in infinite loop) for an inbound queue(name comes from DB table) and after doing certain process result will be pushed to outbound queue(name comes from DB table).
    When application runs in single managed server(without clustering) every thing works fine.
    If I want to deploy the same application in two managed servers (with are under same cluster) which talks to same DB how to handle above scenario
    1. Create 2 JMS servers one on each managed server(on different machines)
    2. Create queue one for each JMS server
    3. Create distributed queue and add above two queues as members of it
    4. Create connection factory and target it to cluster
    After creating above instrastructure(similar infrastructure will be created for inbound and outbound queue), can I use distributed queue JNDI name to create listeners(threads) to read messages? Or do I need to create listeners for each individual member in the distributed queue?
    I know that while sending message to distributed queue, I can create sender on distributed queue and weblogic automatically takes care of sending the message to appropriate member in the DQ, but how it works for distributed queue?
    Also, want to know how can I access distributed queue? For example, if managed server 1 is accessed by http://10.11.134.24:7001 and managed server 2 is accessed by http://10.11.134.25:7001. which URL I need use in JNDI context provider URL to access distributed queue? can I use any URL will it make any difference?
    Generally for servlets/JSPs we create proxy server to access it through cluster, instead of directly using managed server URLs. But how it works for distributed queue?
    Thanks
    Santhosh
    Edited by: user8676720 on Oct 4, 2011 8:35 AM

              Yes.
              It turns out that if replicate local queue jndi name in cluster is set to false
              the message did not get forward :(
              Dongbo Xiao <[email protected]> wrote:
              >Sorry, the attribute is ForwardDelay, not ForwardPolicy.
              >
              >Dongbo
              >
              >Dongbo Xiao wrote:
              >
              >> Hi Eran,
              >>
              >> Have you set up the ForwardPolicy for the Distributed Queue?
              >> By default, the ForwardPolicy is -1, which turns off the forwarding.
              >>
              >> Dongbo
              >>
              >> eran wrote:
              >>
              >> > Hello,
              >> > I have 2 nodes in cluster each one has a pinned JMS server with a
              >queue QueueA
              >> > and QueueA2
              >> > respectively both mebers in a distributed destination dist_queue.
              >> > There is a consumer on QueueA only (startup class).
              >> > In case of a message sent to QueueA2 a consumer is created for QueueA2
              >automaticly
              >> > (seen in the admin console) out of the blue, and the message do not
              >get forward
              >> > to QueueA where my consumer is listening.
              >> > Monitoring JMS connections of both servers shows only my consumers'
              >connection.
              >> > Our application depends on the forward feature.
              >> > Am I doing something wrong? any ideas?
              >> >
              >> > Thanks.
              >> > Eran
              >
              

  • Redirecting failed messages to other consumers of distributed queue

    Hi,
    We have a simple cluster with two servers A and B, each hosting one MDB whose task is to consume message from a distributed queue and forward them to an EIS via a JCA resource adapter. Server B acts as a failover server. If the resource adapter is unable to deliver the message, the MDB will throw a runtime exception and the message will therefore be redelivered. In order to achieve high-availability, we have configured the distributed queue to send the redelivered message to an error destination (dead-letter-queue DLQ). The DLQ again has another instance of the MDB as a consumer with a different resource adapter.
    Using DLQs is working fine as a high-availability mechanism when the MDB is unable to deliver the message to the EIS, but is this a common or valid approach?
    An alternative to using DLQs would be to configure weblogic to send redelivered message to other consumers on the distributed queue. The problem we have is that the failed message always gets redelivered to the same MDB (i.e. the MDB which consumes messages but throws an exception because the resource adapter fails). Is it somehow possible to configure the MDB or even change the MDB code to notify weblogic to send the failed message to another consumer of the distributed queue? Would the MDB be able to disconnect the JMS connection when throwing the exception and if so, would the disconnection cause the application server to deliver the message to another consumer?
    Many thanks

    Thanks Tom,
    Setting the distributed-destination-connection property to EveryMember seems to be exactly what we need to allow other distributed queue member to consume the message which has been put back on the queue after a rollback. In order to ensure that it won't be the same MDB consuming the failed message again, we would have to temporarily suspend the MDB. From what I read, one approach is to sleep the MDB after throwing the runtime exception (but is this possible, i.e. is it not going to interrupt the onMessage before going to sleep?). I also read that there is a new property from WLS 9.0 onwards to automatically stop the MDB for a certain time after an exception has ocurred, how can I configure this? Are we also going to have to set the MDB pool size to 1 in order to ensure that the message gets consumed by an MDB on a different server?
    We have also tried to use a non-collocated approach instead using a collocated approach with distributed queues but we end up with the same problem that a message does not get redelivered to MDBs on other servers after a runtime exception has been thrown.
    Thanks a lot

  • API to list Uniform Distributed Queue JMS Servers

    Hi all,
    I posted this in the SOA suite forum but this one may be better.
    I am writing a POJO webservice to synchronously read a message from a JMS queue. Unfortunately the queue is actually a uniform distributed queue so I actually need to look for messages in each of the local queues.
    I have written code to find the JNDI names of the local queues as follows:
    StringArray DistribMemberNames = new StringArray();
    String ttt;
    ttt = JMSHelper.uddMemberJNDIName("IMPJMSServer_1", part1.getJNDIName());
    DistribMemberNames.add(ttt);
    ttt = JMSHelper.uddMemberJNDIName("IMPJMSServer_2", part1.getJNDIName());
    DistribMemberNames.add(ttt);
    This works fine but I have hard coded the names of the JMS Servers and this is bad practice. I need to find a method where I can take the JNDI name of the uniform distributed queue and find all the JMSServer names. I have been looking for days but I can’t find anywhere in the API documentation that describes this.
    Does anyone have any suggestions?
    Thanks
    Robert
    (I am using 11.1.1.5 on a clustered weblogic enviroment)

    Hi,
    I have managed to answer this question myself.
    I needed to create a context:
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    m_jndiContext = new InitialContext(env);
    Look up the main runtime mbean
    MBeanServer server;
    server = (MBeanServer) m_jndiContext.lookup("java:comp/env/jmx/runtime");
    Navigate down the domain configuration to get the JMSServers
    ObjectName service = null;
    ObjectName domainConfiguration = null;
    ObjectName[] jmsServers = null;
    service = new ObjectName(
    "com.bea:Name=RuntimeService,"
    + "Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
    domainConfiguration = (ObjectName) server.getAttribute(service, "DomainConfiguration");
    jmsServers = (ObjectName[]) server.getAttribute(domainConfiguration, "JMSServers");
    For each server you can retrive it's name:
    for (int i = 0; i < length_serverRT; i++) {
    String jmsServerName = "";
    jmsServerName = (String) server.getAttribute(serverRT, "Name");
    I had to do some additional filtering for my own requirements
    Robert

  • Cannot retrieve data in all members of my distributed queue

    I have a distributed queue with 3 members, queue member 1, queue member 2, and queue member 3.
    I triggered 2 events separately to go to the distributed queue, and it was successful as the 1st event triggered went to queue member 1 (physical queue1 – located on server 1) and the next event sent on the next trigger went to queue member 2 (physical queue 2 – located on server 2).
    The problem now is, after triggering a job that gets the event from distributed queue, only the event in queue member 1 was picked up. The job got completed without picking up the event in queue member 2 (different VM). The data in queue member 2 was left. The config file for the JMS Queue Connectivity may be seen below:
    jms.url=t3://<MS1_IP>:<MS1_PORT>,<MS2_IP>:<MS2_PORT>,<MS3_IP>:<MS3_PORT>
    jms.connfactory=ConnFactoryName
    jms.timeout=30000
    jms.queue=DistributedQueueName
    Note also that the connection factory is deployed to all managed servers as I could see the connection factory in the jndi tree of each managed server.
    Our job was able to get data from each of the managed server, one by one. An example I tried is I placed an event in queue member 1 then triggered the job, then the data was picked up. Then next, I placed the data in queue member 2 (with no other data in queue member 1 and 3), then the data in queue member 2 was picked up after the job run, and same when placed only in queue member 3.
    The main problem here is when there are data in all of the physical queues (queue member 1 to 3). As if the application is focused only to one physical queue, which shouldn’t be. Researching now how should it read all the members in the distributed queue.

    Hi,
    A comma separated URL list helps a client setup its initial JNDI connection into the cluster - it doesn't directly control load balancing of future JEE EJB, RMI, or JMS calls. By default, for remote clients, JEE calls will automatically load balance a new direct connection randomly among all servers in the cluster, even if the initial JNDI URL only references a single server's address. It's actually not truly random, as there may be internal heuristics that effect the load balance decision, plus the behavior is actually tunable, but, for almost all use cases, its best to stay with the default behavior and think of it as effectively random.
    WebLogic JMS load-balancing actually occurs at three layers: URL/DNS, "smart stub" connection creation (RMI, EJB, and JMS connection factory), and finally the distributed destination layers. For a full end-to-end explanation of load balancing at the different layers of the WL stack, I highly recommend the JMS chapter of the book "Professional Oracle WebLogic".
    What's happening in your case is that JMS individual consumer always load balances to one particular queue member, and then sticks to that queue member for their lifetime. This is expected behavior for consumer load balancing, and is fully documented in the distributed destination documention of the JMS programmer's guide.
    If you want to ensure full coverage of a distributed queue, in order of highest to lowest preference:
    * Most highly recommend: Use a WL MDB or a 11gR1PS3 SOA Adapter (if you happen to be using Oracle's SOA layered product). These automatically ensure that all distributed queue members are serviced by at least one dedicated consumer.
    * Ensure you have more sessions+consumers than queue members. Periodically refresh connections/sessions/consumers in order to ensure that newly started members are serviced even when all consumers are already connected (eg, code your clients to reconnect every few minutes).
    * If your application is not performance sensitive, configure the "queue forward delay" setting on a distributed queue. Messages that are trapped on a queue member with no consumers for longer than this delay will be automatically forwarded a member that has consumers.
    * Least recommended, very advanced usage only: Code clients to use the new 10.3.4 public "destination availability" extensions. These extension APIs provide a notification service for distributed destination member up/down events.
    Regards,
    Tom

  • OSB 10gR3 (WLS 10.3) - Distributed Queues & Load Balancing

    I have a question in relation to distributed queues and its JMS proxy service consumer in OSB
    I've set up a uniform distributed queue deployed using a sub-deployment resulting in the queue being targeted to the respective JMS servers in the cluster.
    I've then set up a messaging service using JMS as the transport with the following URI
    jms://server1:7011,server2:7012/weblogic.jms.XAConnectionFactory/myQueue
    When I look at the monitoring tab of my distributed queue, I can see 16 current consumers to one of the members but none for the other one. My understanding is that the proxy is just a mere MDB and as such I thought WLS was optimised to make sure all MDB instances would listen to all members of the distributed queue. Why do I have 16 consumers to one member only?
    Since only one member has consumers, any producer will always push messages to this member only. (I believe it is optimised to get a member with consumer(s) if any available)
    I've also tried to use a custom Connection Factory deployed the same way my distributed queue was, and ensure the connection factory had load balancing enabled. But no success with this either.
    jms://server1:7011,server2:7012/jms.MyConnectionFactory/myQueue
    I looked at the deployment - though not directly performed by me but rather the bus console - and it looks like the application is targeted to the cluster.
    How can I achieve true load balancing here, ensuring both members are consumed by my JMS proxy service?
    In that case, would any produced message go to either member then as both have consumers?
    Also, is the load balancing decision made by the producer when the Queue connection is created?
    If so, how do you achieve true load balancing? Do you need to ask for a new Q connection each time you want to send a message rather than caching the connection?
    Hope I am clear enough
    Thanks
    Arnaud

    This confused me too!
    The way I understand it, is that, as you say, a proxy service is like a single MDB. The MDB will bind to the queue it first finds when it connects.
    The URL that you specify which contains your two servers but the first address in the URL is the one that will be used for the connection. If the first server is unavailable, then the second one will be used.
    If you have a distributed queue, this doesn’t help much, as you do end up with one of the queue members with no consumers on it.
    You can configure a forward delay for the distributed queue, which will cause WLS to forward messages to a queue with consumers, but this isn’t a good idea if you have large JMS messages as WLS needs to serialize and de-serialize across the network to move the message.
    I think that what you have to do, is define two proxy services, one connecting to the first server, and the other connecting to the second.
    I haven’t found a better way so far, but it does seem a bit over the top, but then, if you wrote a an external java client which attached to a distributed queue you would specify the connection url and it would behave in the same way – if you wanted it to bind to both distributed destination members, you would have to code it or run two instances, so maybe its just working as it should – even though it seems strange.
    I think the producer will simply load balance across the distributed queue members, it doesn’t pay any attention whether there are to consumers attached – this happened to me the other day!!
    Pete

Maybe you are looking for