JMS Clustering -- Automatic Redelivery

          Hi:
          Here is my understanding of distributed JMS. We are clustering three machines
          (A, B and C).
          Since JMS Servers themselves cannot have a cluster as a Target deployment,
          We create a 3 JMS Servers
          JMSServer1 with a Target of A
          JMSServer2 with a Target of B
          JMSServer3 with a Target of C
          Now we create a distributed Queue/Topic. (JNDI Name - MyQueue)
          We have the weblogic console autocreate topics and queues on each of the JMS
          Servers. They are JNDI named something like MyQueue@JMSServer1 , MyQueue@JMSServer2
          and MyQueue@JMSServer3
          Now -- Correct me if I am wrong -- When I do a JNDI Lookup for MyQueue --
          the WLConnectionfactory will give me a reference to an object in one of the three
          servers right. Now after I get the reference, the server that I have a remote
          reference goes down. When I try to post a message into the queue with the same
          remote reference Is there any kind of automatic redelivery or a relookup and
          get the next available server proxy (like in the EJB's) that is there ?
          What happens in such a case? Can the JMS stub that I have on the client dynamically
          (after it has been looked up) do redelivery on another server?
          I understand that if I do a lookup again I will not be pinned to the machine
          that just went down. This would be guaranteed by the ConnectionFactory right?
          Please let me know if this is not the case.
          Thanks and I really appreciate any help and input in the matter.
          Vivek Bhaskaran
          [email protected]
          

          In our practice with Weblogic 7 JMS, we use distributed destination to handle sender
          and MDB. If your sender fails because of JMS server down, you should catch exceptions
          and resend it. When poll the message from the queue, we talk to the individual
          physical queues directly.
          "Vivek Bhaskaran" <[email protected]> wrote:
          >
          >Hi:
          >
          > Here is my understanding of distributed JMS. We are clustering three
          >machines
          >(A, B and C).
          >
          > Since JMS Servers themselves cannot have a cluster as a Target deployment,
          >
          > We create a 3 JMS Servers
          > JMSServer1 with a Target of A
          > JMSServer2 with a Target of B
          > JMSServer3 with a Target of C
          >
          > Now we create a distributed Queue/Topic. (JNDI Name - MyQueue)
          > We have the weblogic console autocreate topics and queues on each
          >of the JMS
          >Servers. They are JNDI named something like MyQueue@JMSServer1 , MyQueue@JMSServer2
          >and MyQueue@JMSServer3
          >
          >
          > Now -- Correct me if I am wrong -- When I do a JNDI Lookup for MyQueue
          >--
          >the WLConnectionfactory will give me a reference to an object in one
          >of the three
          >servers right. Now after I get the reference, the server that I have
          >a remote
          >reference goes down. When I try to post a message into the queue with
          >the same
          >remote reference Is there any kind of automatic redelivery or a relookup
          >and
          >get the next available server proxy (like in the EJB's) that is there
          >?
          >
          > What happens in such a case? Can the JMS stub that I have on the
          >client dynamically
          >(after it has been looked up) do redelivery on another server?
          >
          > I understand that if I do a lookup again I will not be pinned to
          >the machine
          >that just went down. This would be guaranteed by the ConnectionFactory
          >right?
          >Please let me know if this is not the case.
          >
          > Thanks and I really appreciate any help and input in the matter.
          >
          >
          >Vivek Bhaskaran
          >[email protected]
          

Similar Messages

  • Need Help on Weblogic JMS Clustering

    Hi All
    Our code is moving to a clustered environment (2 OSB managed servers), in order to support JMS clustering i have already done the below, I just need your advice whether i have done it correctly or not. Please advise
    1) Created 2 JMS Servers, targeted one JMS Server on OSB MS 1 and second JMS Server on OSB MS 2.
    2) Created distributed destinations (Queues and Topics) subdeployment on both JMS Servers.
    3) Targeted all connection factories to OSB Clsuter. Load Balancing and Server Affinity is enabled by default. Should server affinity be disabled for proper load balancing to occur? Please advise on this
    3) JMS Proxy and business services use cluster URL's now (jms://serverA:7001,serverB:7001/CF/QueueOrTopic). I Hope its correct? Please advise
    Is there any other setting that i need to do or i have missed out? Please let us know.
    Also, one more thing we are calling SOA Composites via SOA-Direct protocol in OSB. The SOA Servers owned by some other team will also be load balanced. Since this is a t3 call, HTTP load balancer would not come into picture here, right? How do i load balance this outgoing call from business service (2 options bellow)
    1) t3://server1:8001,server2:8001/default/ABCProduct!1.0/ABCService_DirectBinding
    2) Specifying two individual endpoints and selecting load balancing algorithm as Round Robin
    t3://server1:8001/default/ABCProduct!1.0/ABCService_DirectBinding
    t3://server2:8001/default/ABCProduct!1.0/ABCService_DirectBinding
    what is the diff between the above 2 options? Also, if one of the SOA nodes go down, than which option would automatically redirect to other node. We have to ensure this as the HTTP load balancer ensures this thing. Thanks
    Edited by: Amit Sachdev on Jun 13, 2012 12:16 AM

    Hi Amit,
    The first part looks correct.
    Create two jms servers (jmsosb1, jmsobs2)
    Create data source and jndi location
    create foreign connection factory under JmsModule, create destination and connection factory.
    the cluster business service end point will be
    jms:///<<ForeignConnectionFactory Name>>/<<destination local jndi name>>
    The second part SOA endpoint will be in cluster environment as follows:
    http://<< cluster name>>/soa-infra/services/default/<<composite name>>/<<servicename>>
    example:
    http://test.ch/soa-infra/services/default/cm.conn.bp.test/test_client_ep
    or if you want to invoke two nodes directly you use below url as well.
    http://<<SOAservername1>>:<<port>>,<<SOAservername2>>:<<port>>//soa-infra/services/default/<<composite name>>/<<servicename>>
    Regards,
    Padmanabham

  • Different behaviour in JMS Cluster automatic failover

    Hi,
              I am problem in JMS clustering, now let me explain the scenario.
              I have 2 managed servers participating in the weblogic cluster, now since JMS is a singleton service what i did is i have created 2 JMS servers and targeted them to Managedservers 1 and 2 respectively.I have also created a Distributed Destination and deploy they with the deployment "wizard" ("autodeploy") to all the member of the cluster.
              Now in my case I created two different type of client
              Asynchronous and synchronous .
              The first one register himself as MessageListener and also as ExceptionListener. When I bring down the managed server in which the client is connect the call back method onException is called.
              The second client instead register himself as ExceptionListener but not as MessageListener. It call in different thread the receive method on the destination.
              In this case if i I bring down the managed server in which the client is connect the call back method onException is NOT called, instead i receive the JMSException on all the call "receive".
              I expected that the behaviour was the same of the firts client.
              Thanks in advance.
              dani

    Its not clear from your description what you're trying to do, as typical apps use a single module, including those that use distributed destinations, and typical apps do not use the convention of specifying a module name in their JNDI name. (The "!" syntax makes me suspect that you're not using JNDI to lookup destinations, rather you're using the rarely recommended JMS session "createQueue()" call.).
    Never-the-less, I suspect the problem is simply that your using a distributed queue and haven't realized that queue browsers and consumers pin themselves to a single queue member. To ensure full coverage of a distributed queue, the best practice is to use a WebLogic MDB: WebLogic MDBs automatically ensure that each queue member has consumers.
    By the way, if you are using a distributed queues, then the best practice config is as follows for each homogeneous set of JMS servers:
    -- Configure a custom WL store per server, target to the server's default migratable target.
    -- Configure a JMS server per server, target to the server's default migratable target, set the store for the JMS server to be the same as the custom store.
    -- Configure a single JMS module, target to the cluster.
    -- Configure a single subdeployment for the module that references each JMS server (and nothing else).
    -- Configure one or more distributed queues for the module. Never use default targeting -- instead use advanced subdeployment targeting to target each distributed queue to the single subdeployment you defined earlier.
    -- Configure one or more custom connection factories in the module, use default targeting.
    I recommend that you read through the JMS admin and programmer's guides in the edocs if you haven't done so already. You might find that the JMS chapter of the new book "Professional Oracle WebLogic" is helpful.
    Tom
    Edited by: TomB on Nov 4, 2009 10:12 AM

  • Tom Help needed in JMS Clustering!!!!!!!!!

    Hi Tom,
              I have a typical problem with JMS Clustering,i amtrying to implement an automatic failover by registering the connection and the session with the exception listener and then inside onexception method i have reconnect logic.
              My application has an applet and the downloading page directly loads the MyApplet jar and weblogic thin client jars and then when i switch of the server using in CTRl-C in windows environment with a single server onException gets fired.Now for clustering we have moved to enterprise archive setup(.ear) and my applet jar and thinclient jars are bundled with in the war(web archive) and the war is inside the ear.In this scenario when i shut down one of the managed servers the onexception does not get invoked and then i shut down both the servers then also its not getting invoked, plz help me i dont understand what is wrong with this,when the servers are on onMessage works fine and my real time blotters also get updated.
              My clustering set up has 2 managed servers,2 JMS servers targeted to each managed server and a distributed topic.
              In a noraml scenario when the servers are running my onMessage gets called, but when i shutdown the servers the onException does not get called from the EAR.
              Pls help me on how to proceed.i cant put the thick weblogic.jar as down loading from my applet cannot handle it.
              Regards,
              Suresh

    Sorry Suresh -
              I don't know what is going wrong - my suspicion is that you've found a bug in WebLogic thin-client IIOP.
              Since the problem started when you moved to SP5, you can try continuing to use the SP4 jar on the client.
              And sometimes this type of problem is with with Sun JDK libraries (which supplies most of the thin client IIOP stack), so there's a small chance switching to a 1.5JVM for the client would work (I don't know if BEA supports this).
              You might also try posting to the rmi-iiop newsgroup. (Andy just loves it when I push problems off to him! Well maybe not.)
              Tom

  • Problem in Automated Failover in JMS Clustering

    Hi,
              I am facing a problem in JMS clustering, now let me explain the scenario.
              I have 2 managed servers participating in the weblogic cluster, now since JMS is a singleton service what i did is i have created 2 JMS servers and targeted them to Managedservers 1 and 2 respectively.I have also created a DistributedTopic
              Now in my case an applet is the JMS client i have registered the exception listener on both the topic connection and WLSession, now when i bring down one managed server forcefully(Ctrl-C) the call back method onException is supposed to have been called,which has reconnect method which tries to get the connection but it does not happen in this clustered environment.
              I have checked the same thing without a cluster i.e with a single server (Admin server) and it seems to be calling the Onexception call back method.
              What is wrong with this approach.
              Another query just to add on to this is, is this the right approach to achieve automated failover in a clustered environment or do i have to go with Migratable servers concept(not clear on this though).
              Thanks in advance.
              Suresh

    I think is correct.U must stop all the server of the cluster, or to know how of the two your client is using. U can used the amministration console to monitoring the status of the destination of the JMS server.
              I have a similar problem, but using tho different kynd of Receiver.
              Now in my case I created two different type of client
              Asynchronous and synchronous .
              The first type registered himself as MessageListener and also as ExceptionListener on the connection. When I bring down the managed server in which the client was connected the call back method onException is called as the bea documentation explains.
              The second client instead registered himself as ExceptionListener but not as MessageListener on the connestion. It called in different execution thread the receive method on the receiver created using the connection.
              In this case when i bring down the managed server in which the client is connect the call back method onException was NOT called, instead the client received the JMSException on all the call "receive()".
              This is true? I expected instead that the behaviour of the 2 type of client was the same!

  • Reg : JMS Clustering

              Hai,
              I am facing one problem in JMS Clustering. can any one throws a light on that?
              it will be very helpful to
              me.
              i configured WebLogic Cluster with node1 and node 1 as Managed Servers.
              i created jmsserver1 and jmsserver2.
              i created queue1 and queue2 in jmsserver1 and jmsserver2 respectively.
              i created one distributed destination by adding queue1 and queue2 as members.
              i targetted jmsserver1 to node1 and jmsserver2 to node2.
              i wrote one program that send the messages to distributed destination using it's
              jndi name.
              i have send some messages to distributed queue.
              after i shutdown the any one of the managed server ex: node1. after that while
              i am trying to send the message to
              distributed destination, it is throwing the exception that no such a jndi name.
              i have checked with JNDI tree.
              jndi name of distributed destination is not there?
              is there any configuration missing or some thing else?
              can any one help me to solve this problem?
              regards
              cg
              

    Sounds like you've set things up correctly. Post your config.xml
              and I'll take a quick look. Please also include the JNDI
              name of the distributed dest your client is looking up.
              cg wrote:
              > Hai,
              > I am facing one problem in JMS Clustering. can any one throws a light on that?
              > it will be very helpful to
              > me.
              >
              > i configured WebLogic Cluster with node1 and node 1 as Managed Servers.
              > i created jmsserver1 and jmsserver2.
              > i created queue1 and queue2 in jmsserver1 and jmsserver2 respectively.
              > i created one distributed destination by adding queue1 and queue2 as members.
              >
              >
              > i targetted jmsserver1 to node1 and jmsserver2 to node2.
              >
              > i wrote one program that send the messages to distributed destination using it's
              > jndi name.
              >
              > i have send some messages to distributed queue.
              > after i shutdown the any one of the managed server ex: node1. after that while
              > i am trying to send the message to
              > distributed destination, it is throwing the exception that no such a jndi name.
              > i have checked with JNDI tree.
              >
              > jndi name of distributed destination is not there?
              >
              > is there any configuration missing or some thing else?
              >
              >
              > can any one help me to solve this problem?
              >
              >
              > regards
              > cg
              >
              >
              

  • Jms clustering with spring

    Hi
    i have created the jms clustering configuration in weblogic 10.3.3 that i am facing issues in the connection queue like this
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'queueConnectionFactory' defined in ServletContext resource [WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Unable to resolve 'QueueConnectionFactory'. Resolved ''; remaining name 'QueueConnectionFactory'
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401)
         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
    and i have configured servers below
    clustered the managed servers MS-1 and MS-2
    Servers Targets
    JMS Server Admin server
    JMS Module cluster
    connection queue cluster
    queue JMSServer
    i have tried with the 2 different JMS servers for managed servers
    Servers Targets
    JMS Server - 1 MS-1
    JMS Server - 2 MS-2
    JMS Module cluster
    connection queue cluster
    queue JMSServer - 1 and JMSServer - 2
    so, please help us to configure the JMS clustering with spring.
    Note : please find the spring - applicationContext.xml below thats is used to configure the connection factory and jms queue.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
         <bean id="invoiceListener" class="com.spring.jms.InvoiceMDB" />
         <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
              <property name="environment">
                   <props>
                        <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                        <prop key="java.naming.provider.url">t3://localhost:6001,localhost:6003,localhost:6005</prop>
                   </props>
              </property>
         </bean>
         <bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiTemplate"><ref bean="jndiTemplate" /></property>
              <property name="jndiName"><value>QueueConnectionFact</value></property>
         </bean>
         <bean id="invoiceQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
              <property name="connectionFactory"><ref bean="queueConnectionFactory" /></property>
              <property name="destinationResolver"><ref bean="jmsDestinationResolver" /></property>
         </bean>
         <bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
              <property name="jndiTemplate"><ref bean="jndiTemplate" /></property>
              <property name="cache"><value>true</value></property>
         </bean>
         <bean id="jmsInvoiceSender" class="com.spring.jms.InvoiceQueueSender">
              <property name="jmsTemplate"><ref bean="invoiceQueueTemplate" /></property>
         </bean>
         <bean id="invoiceQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiTemplate"><ref bean="jndiTemplate"/></property>
              <property name="jndiName"><value>MyQueue</value></property>
         </bean>
         <bean id="Invoicelistener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
         <property name="concurrentConsumers" value="5" />
         <property name="connectionFactory" ref="queueConnectionFactory" />
         <property name="destination" ref="invoiceQueue" />
         <property name="messageListener" ref="invoiceListener" />
         <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
    <property name="sessionTransacted" value="true" />
         </bean>
    </beans>

    Are you sure you have defined the correct JNDI-name in the Spring config file?
    An example set-up of a domain can be found here - http://middlewaremagic.com/weblogic/?p=7795 (the script presented in the create domain section)
    This is basically the same set-up you have, except that a distributed queue is being used that is targeted to JMS Servers through a subdeployment.
    The Spring configuration looks as follows:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
            <property name="environment">
                <props>
                    <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                    <prop key="java.naming.provider.url">t3://192.168.1.50:9001,192.168.1.50:9002</prop>
                </props>
            </property>
        </bean>
        <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiTemplate" ref="jndiTemplate"/>
            <property name="jndiName" value="jms/ConnectionFactory"/>
        </bean>
        <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiTemplate" ref="jndiTemplate"/>
            <property name="jndiName" value="jms/CompanyQueue"/>
        </bean>
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="connectionFactory"/>
            <property name="defaultDestination" ref="destination"/>
        </bean>
        <bean id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
            <property name="workManagerName" value="java:comp/env/default"/>
            <property name="resourceRef" value="true"/>
        </bean>
        <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory"/>
            <property name="destination" ref="destination"/>
            <property name="messageListener" ref="receiver"/>
            <property name="taskExecutor" ref="taskExecutor"/>
        </bean>
        <bean id="sender" class="model.logic.JMSSender">
            <property name="jmsTemplate" ref="jmsTemplate"/>
        </bean>
        <bean id="receiver" class="model.logic.JMSReceiver"/>
    </beans>To test create a servlet, for example,
    public class TestServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            JMSSender jmsSender = SpringUtilities.getJMSSender();
            jmsSender.sendMessage();
            System.out.println("message send by the testservlet");
    }and web.xml as
    <web-app ...>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-config.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!-- default weblogic work manager -->
        <resource-ref>
            <res-ref-name>default</res-ref-name>
            <res-type>commonj.work.WorkManager</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
        <!-- default weblogic timer manager -->
        <resource-ref>
            <res-ref-name>tm/default</res-ref-name>
            <res-type>commonj.timers.TimerManager</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
        <servlet>
            <servlet-name>TestServlet</servlet-name>
            <servlet-class>test.TestServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>TestServlet</servlet-name>
            <url-pattern>/testservlet</url-pattern>
        </servlet-mapping>
    </web-app>with this set-up the JMS clustered and Spring is able to use it on both servers.

  • Jms clustering and application clustering

    Hello:
              Suppose an application that contains mdb is deployed in a cluster cl.
              Should the jms clustering be done in the same cluster or can it be a
              seperate cluster.
              regards,
              ravi
              

    JMS distributed destinations are optimized
              for the use case where the MDB is on the same
              server as the destination. If you are not
              using distributed destination this is less
              of an issue. In either case, MDBs can
              be run in a seperate cluster than JMS -
              sometimes this can simplify administration.
              Read the JMS Performance Guide white-paper
              for more information.
              http://dev2dev.bea.com/technologies/jms/index.jsp
              Ravi Krishnamurthy wrote:
              > Hello:
              > Suppose an application that contains mdb is deployed in a cluster cl.
              > Should the jms clustering be done in the same cluster or can it be a
              > seperate cluster.
              >
              > regards,
              > ravi
              >
              

  • JMS clustering

    Does weblogic5.1 support JMS clustering? If it doesn't when it is going to
              be.
              -Muruga
              

    JMS is available as a cluster wide service today. You have a single node
              that is a JMS provider for the entire cluster.
              In a future release, we plan to fully cluster our JMS service.
              For more information, I suggest contacting your sales representative who can
              provide you with a bit more detail.
              Thanks,
              Michael
              Michael Girdley
              Product Manager, WebLogic Server & Express
              BEA Systems Inc
              Muruga Chinnananchi <[email protected]> wrote in message
              news:8fsqbu$he0$[email protected]..
              > Does weblogic5.1 support JMS clustering? If it doesn't when it is going to
              > be.
              >
              > -Muruga
              >
              >
              

  • Weblogic JMS clustering

    Hi All,
    I need help understanding weblogic JMS clustering. I read few documents regarding this but not very clear about it.
    Hope to get help/suggestion here.
    I have following setup
    box1 - adminserver, osbserver1
    box2- osbserver2
    osbserver1 and osbserver2 are clustered together
    I have a JMS server created each one for each managed server (OSB server) in the cluster. These JMS servers are non-persistent. persistent store is "None".
    I have one JMS module created with connection factory, distributed Qs and are associated with a subdeployment that is targeting to the cluster
    I have all the servers(admin server and both OSB servers) are in running state
    To monitor JMS server I go to services->JMS Servers
    I see jmsserver1 which is targeted to osbserver1 has "Health" is marked as "OK"
    jmserver2 which is targeted to osbserver2 has no "health" check
    If I go to environment->servers , I see all the 3 servers are marked as "RUNNING" with "Health" OK
    As a note I created managed server in the second box before creating the JMS server and resources.
    And I do not have any nodemanager setup at this point.
    How would I know the JMSserver in both servers are active and have no issues ?
    Do I need to do anything to start JMSServer in OSBServer2 ?
    Edited by: 818591 on Feb 11, 2011 8:27 AM
    Edited by: 818591 on Feb 11, 2011 9:31 AM

    Should the JMS Server/JMS modules already be created so that the remote managed server will get configuration of these setup?No. This is not how resorces are created. Pack/unpack is used for creating the domains, ONCE. Later on you may very well use Weblogic admin console to create the resources and target/untarget those.
    As a note I do not have node managed setup yet. It is recommended that you use node manager in environments where servers may be installed on different machines -
    http://download.oracle.com/docs/cd/E14571_01/web.1111/e13740/toc.htm
    To me, it seems a network/cluster communication issue. If you have Oracle Support, better raise a SR with them to find out the exact issue as they would be in better position to understand your architecture and analyzing logs. You may also raise a thread in Oracle Weblogic forum to get a suggestion from a Weblogic expert -
    WebLogic Server - Clustering
    Regards,
    Anuj

  • Jms clustered license

    hi,
              Do you I need to obtain a separate license for testing jms clustering (distributed queues DQ)?
              I've downloaded weblogic9.2 from the Internet and in documentation there is information that I should have such a license.
              Do you think that it applies to so evaluating the product?
              I'm encountering strange problems with DQ hence my question.

    Grzegorz (Greg) Stasica <> wrote:
              > hi,
              >
              > Do you I need to obtain a separate license for testing jms clustering
              > (distributed queues DQ)? I've downloaded weblogic9.2 from the Internet and
              > in documentation there is information that I should have such a license.
              > Do you think that it applies to so evaluating the product? I'm
              > encountering strange problems with DQ hence my question.
              As far as I know you can use it with your 'evaluation' version or developer
              version.
              B
              Schelstraete Bart
              [email protected]
              http://www.schelstraete.org
              http://www.linkedin.com/in/bschelst

  • JMS (bea 9) redelivery does not work ?

    I'm a bit at a loss. Any help is therefore welcome.
    I am using Bea 9 and Java 1.5.
    I have a MDB bean that attempts to transmit data to a foreign site via ftp. When it fails to transmit files, it errors and the message's content (a file) that I attempted to send to remote system is rollbacked. I have set the redelivery count to -1 and the redelivery delay to 1 minute. After a minute, the message is replayed and this as long as the bean is unable to transfer the file. This is what I wanted to do. And all is fine.
    But...
    If I stop the server while messages are waiting to be redelivered and then launch again the server just after, then the server only replays 2 or 3 messages (or 2 or 3 times the same message) and then stop replaying messages which should be redelivered every minute. New messages sent to the bean are also not presented to the bean. Everything seems frozen as far as this bean is concerned..
    But, if I look at the console and display the monitoring info of this MDB after a restart, I read :
    Beans In Use Count 0
    Waiter Current Count 0     
    Timeout Total Count     0
    Access Total Count     2
    Destroyed Total Count     2
    Connection Status Connected     
    Destination FtpQueue
    JMS Client ID
    Status running
    Last Exception      java.lang.Error: com.mycompany.FtpException: Could not connect to server ftpsrv2
    It is "running"...
    Any ideas ?
    Thanks in advance for any tips.
    P.Z.

    Hi,
    Redelivery delays themselves are not persisted - messages that are subject to a redelivery delay should be immediately redelivered if their host JMS server is shutdown and restarted.
    MDBs that are causing rollbacks/recovers have a built in pause/retry algorithm that causes them to automatically shutdown after a certain number of failures and then restart after an interval. The purpose is to prevent failing MDBs from running in a tight loop. The MDB edocs provide a bit more detail.
    If this doesn't help, I have some questions that might help narrow down the problem:
    -- Are the messages persistent?
    -- Is the JMS server running on the same server as the MDB? If not, which server are you stopping?
    -- How are you stopping the server?
    -- What do the pending and current counts look like on the destination?
    -- Are you using the "unit-of-order" feature?
    Tom Barnes
    WebLogic Messaging Developer Team

  • OSB jms clustering - load balancing seems to be not working

    Hi All,
    I have one admin server and two managed servers running ( one of these managed server is running in the remote linux machine) in a cluster
    I have connectionfactory created with load balance enabled with round robin
    and server affinity is disabled
    I have queue created as uniformly distributed Q
    I have a proxy service with load balancing as roundrobin and endpoint URL as below
    jms://rdoelapp001011:61703,rdoelapp001013:61703/synergyConnectionFactory1/MM_gridQ0
    If I execute this proxy sending messages it always go to one server only. There is no message going to the other server.
    If I shutdown the server that receives messages then the other server is receiving messages. Seems like fail-over is working but not the load-balancing
    There is one point may be worth mentioning here is, from the admin console if I look at the servers for the clusters it has below information
    Name      State      Drop-out Frequency      Remote Groups Discovered      Local Group Leader      Total Groups      Discovered Group Leaders      Groups      Primary      
    synergyOSBServer1     RUNNING     Never     0     synergyOSBServer1     1     synergyOSBServer1     *{synergyOSBServer1}*     0          
    synergyOSBServer2     RUNNING     Never     0     synergyOSBServer1     1     synergyOSBServer1     *{synergyOSBServer1, synergyOSBServer2}* 0
    one server has groups as {synergYOSBServer1} instead of {synergyOSBServer1, synergyOSBServer2}. Does that look correct?
    here is my jms xml file
    <?xml version='1.0' encoding='UTF-8'?>
    <weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
    *<connection-factory name="synergyConnectionFactory1">*
    *<sub-deployment-name>synergySubDeploy1</sub-deployment-name>*
    *<default-targeting-enabled>false</default-targeting-enabled>*
    *<jndi-name>synergyConnectionFactory1</jndi-name>*
    *<client-params>*
    *<client-id-policy>Restricted</client-id-policy>*
    *<subscription-sharing-policy>Exclusive</subscription-sharing-policy>*
    *<messages-maximum>10</messages-maximum>*
    *</client-params>*
    *<transaction-params>*
    *<xa-connection-factory-enabled>false</xa-connection-factory-enabled>*
    *</transaction-params>*
    *<load-balancing-params>*
    *<load-balancing-enabled>true</load-balancing-enabled>*
    *<server-affinity-enabled>false</server-affinity-enabled>*
    *</load-balancing-params>*
    *<security-params>*
    *<attach-jmsx-user-id>false</attach-jmsx-user-id>*
    *</security-params>*
    *</connection-factory>*
    <uniform-distributed-queue name="errorQ">
    <sub-deployment-name>synergySubDeploy1</sub-deployment-name>
    <default-targeting-enabled>false</default-targeting-enabled>
    <jndi-name>errorQ</jndi-name>
    <load-balancing-policy>Round-Robin</load-balancing-policy>
    <forward-delay>-1</forward-delay>
    <reset-delivery-count-on-forward>true</reset-delivery-count-on-forward>
    </uniform-distributed-queue>
    <uniform-distributed-queue name="undlvQ">
    <sub-deployment-name>synergySubDeploy1</sub-deployment-name>
    <default-targeting-enabled>false</default-targeting-enabled>
    <jndi-name>undlvQ</jndi-name>
    <load-balancing-policy>Round-Robin</load-balancing-policy>
    <forward-delay>-1</forward-delay>
    <reset-delivery-count-on-forward>true</reset-delivery-count-on-forward>
    </uniform-distributed-queue>
    *<uniform-distributed-queue name="MM_gridQ0">*
    *<sub-deployment-name>synergySubDeploy1</sub-deployment-name>*
    *<default-targeting-enabled>false</default-targeting-enabled>*
    *<jndi-name>MM_gridQ0</jndi-name>*
    *<load-balancing-policy>Round-Robin</load-balancing-policy>*
    *<forward-delay>5</forward-delay>*
    *<reset-delivery-count-on-forward>true</reset-delivery-count-on-forward>*
    *</uniform-distributed-queue>*
    <saf-imported-destinations name="synergySAFImportedDest1">
    <sub-deployment-name>synergySubDeploy1</sub-deployment-name>
    <default-targeting-enabled>false</default-targeting-enabled>
    <saf-queue name="gridQ0">
    <remote-jndi-name>MB_gridQ0</remote-jndi-name>
    <local-jndi-name>gridQ0</local-jndi-name>
    <non-persistent-qos>At-Least-Once</non-persistent-qos>
    <time-to-live-default>0</time-to-live-default>
    <use-saf-time-to-live-default>false</use-saf-time-to-live-default>
    <unit-of-order-routing>Hash</unit-of-order-routing>
    </saf-queue>
    <jndi-prefix>MB_</jndi-prefix>
    <saf-remote-context>synergySAFContext1</saf-remote-context>
    <saf-error-handling>synergySAFErrorHndlr1</saf-error-handling>
    <time-to-live-default>0</time-to-live-default>
    <use-saf-time-to-live-default>false</use-saf-time-to-live-default>
    <unit-of-order-routing>Hash</unit-of-order-routing>
    </saf-imported-destinations>
    <saf-remote-context name="synergySAFContext1">
    <saf-login-context>
    <loginURL>t3://rdoelapp001013:7001</loginURL>
    <username>weblogic</username>
    <password-encrypted>{AES}z9VY/K4M7ItAr2Vedvhx+j9htR/HkbY2LRh1ED+Cz5Y=</password-encrypted>
    </saf-login-context>
    <compression-threshold>2147483647</compression-threshold>
    </saf-remote-context>
    <saf-error-handling name="synergySAFErrorHndlr1">
    <policy>Log</policy>
    <log-format xsi:nil="true"></log-format>
    <saf-error-destination xsi:nil="true"></saf-error-destination>
    </saf-error-handling>
    </weblogic-jms>
    Any help will be greatly appriciated
    Edited by: 818591 on Feb 16, 2011 11:28 AM

    I am not getting you here "the right approach is to make OSB run on the man server cluster and not on admin server. "
    I have a jms proxy service that I created from admin console
    And also I have gone thru the step 5 in the link below
    http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/deploy/config.html#wp1524235
    If I am not wrong, the proxy service endpoint URI determines where it is pointing to. If it is a cluster environment, it should point to a clustered address
    My proxy has below endpoint URI
    jms://rdoelapp001011:61703,rdoelapp001013:61703/synergyConnectionFactory1/MM_gridQ0
    and rdoelapp001011:61703,rdoelapp001013:61703 is my cluster address
    As per your suggestion "To fix your problem, *make osb to run on the cluster* and specify the same URL for the jms proxy service"
    Could you please provide some instruction how would I "make osb jms proxy service to run in a cluster"
    As a note, I have Q defined as a distributed Q and connection factory targets to the cluster. UDQ also targtes to the cluster.
    Just for a testing I have created another manged server running local to the machine where my admin server is running
    And I created a proxy by following steps as I mentioned above and with endpoint URI as below
    jms://rdoelapp001011:61703,rdoelapp001013:61703,*rdoelapp001011:61700*/synergyConnectionFactory1/MM_gridQ0
    where the new address of my cluster is rdoelapp001011:61703,rdoelapp001013:61703,rdoelapp001011:61700
    It did create consumers in both the managed servers in the cluster that are running locally, but no consumers in the remote managed server.
    So I am kind of leaning towards thinking that there is some incorrect setup for the remote managed server and may be admin server is not able to communicate to the remote server for some reason but not sure about it..
    As a note the cluster is setup to communicate using "unicast" channel
    and I created a channel in each manged server with the same name
    here is the cluster configuration
    <name>synergyCluster1</name>
    <cluster-address>rdoelapp001011:61703,rdoelapp001013:61703,rdoelapp001011:61700</cluster-address>
    <default-load-algorithm>round-robin</default-load-algorithm>
    *<cluster-messaging-mode>unicast</cluster-messaging-mode>*
    *<cluster-broadcast-channel>synergyChannel1</cluster-broadcast-channel>*
    *<number-of-servers-in-cluster-address>3</number-of-servers-in-cluster-address>*
    </cluster>
    here are the twoOSBserver configuration
    <server>
    <name>synergyOSBServer1</name>
    <machine xsi:nil="true"></machine>
    <listen-port>61703</listen-port>
    <cluster>synergyCluster1</cluster>
    <web-server>
    <web-server-log>
    <number-of-files-limited>false</number-of-files-limited>
    </web-server-log>
    </web-server>
    <server-debug>
    <debug-scope>
    <name>weblogic.jms.saf</name>
    <enabled>true</enabled>
    </debug-scope>
    <debug-jmssaf>true</debug-jmssaf>
    <debug-saf-sending-agent>true</debug-saf-sending-agent>
    </server-debug>
    <listen-address>localhost</listen-address>
    <network-access-point>
    *<name>synergyChannel1</name>*
    *<protocol>cluster-broadcast</protocol>*
    *<listen-address>localhost</listen-address>*
    *<listen-port>61702</listen-port>*
    <http-enabled-for-this-protocol>true</http-enabled-for-this-protocol>
    <tunneling-enabled>false</tunneling-enabled>
    *<outbound-enabled>true</outbound-enabled>*
    *<enabled>true</enabled>*
    <two-way-ssl-enabled>false</two-way-ssl-enabled>
    <client-certificate-enforced>false</client-certificate-enforced>
    </network-access-point>
    <jta-migratable-target>
    <user-preferred-server>synergyOSBServer1</user-preferred-server>
    <cluster>synergyCluster1</cluster>
    </jta-migratable-target>
    </server>
    <server>
    <name>synergyOSBServer2</name>
    <ssl>
    <enabled>false</enabled>
    </ssl>
    <machine xsi:nil="true"></machine>
    <listen-port>61703</listen-port>
    <listen-port-enabled>true</listen-port-enabled>
    <cluster>synergyCluster1</cluster>
    <web-server>
    <web-server-log>
    <number-of-files-limited>false</number-of-files-limited>
    </web-server-log>
    </web-server>
    <listen-address>rdoelapp001013</listen-address>
    <network-access-point>
    *<name>synergyChannel1</name>*
    *<protocol>cluster-broadcast</protocol>*
    *<listen-address>rdoelapp001013</listen-address>*
    *<listen-port>61702</listen-port>*
    <http-enabled-for-this-protocol>true</http-enabled-for-this-protocol>
    <tunneling-enabled>false</tunneling-enabled>
    *<outbound-enabled>true</outbound-enabled>*
    *<enabled>true</enabled>*
    <two-way-ssl-enabled>false</two-way-ssl-enabled>
    <client-certificate-enforced>false</client-certificate-enforced>
    </network-access-point>
    <java-compiler>javac</java-compiler>
    <jta-migratable-target>
    <user-preferred-server>synergyOSBServer2</user-preferred-server>
    <cluster>synergyCluster1</cluster>
    </jta-migratable-target>
    <client-cert-proxy-enabled>false</client-cert-proxy-enabled>
    </server>
    <server>
    Edited by: 818591 on Feb 18, 2011 11:26 AM

  • JMS/clustering design and configuration question

    Hi:
              Any help or feedback much appreciated cos' this topic (no pun intended)
              seems to be complicated.
              I have an application that uses stateless session beans for mainline
              business functionality (heavy database writing) that is say then
              audited. The auditing is taken care of asynchronously by the SS bean's
              business method (after completing whatever it is doing) using a JMS
              connection factory to write to a queue which is consumed by a MDB. So,
              control is returned to the user ostensibly before the auditing is done
              for performance reasons. No transactional semantics are expected between
              the mainline business logic and the audit of same. So, our main use of
              JMS/MDB is for asynchrous operation. This design seems to be fine on a
              single server as long as a persistent store is configured.
              Now the hard part. We need to cluster - again for load-balancing and
              performance. As I've read thru this newsgroup and experimented some,
              I've quickly realized that it's not as simple as just configuring a
              cluster of just EJBs.
              Since the queues are basically used for asynch processing, would the
              following work?
              1) Set up a JMS server config for each WL server in the cluster targeted
              only for each WL server
              2) Set up a different queue for each JMS server with prefixed JNDI name
              (myserver1_someJNDIname)
              3) Configure/code the producer SS EJBs so that they ask the connection
              factory for a connection with a prefixed JNDI name (e.g
              myserver1_someJNDIname) based on the server they are running on (known
              perhaps from a property file local to each server)
              4) Target MDBs to be deployed on all servers in the cluster just like
              regular EJBs
              5) Finally, deploy the MDBs unjarred on each WL server and edit the
              weblogic-ejb-jar.xml on each server to set the -destination name-
              prefixed by the server on which it is deployed (e.g.
              myserver1_someJNDIname)
              Will the above basically accomplish what I'm after, which is a cluster
              of machines each equally capable of locally offloading asynchronous
              processing? I understand that for the most part WL server will use local
              EJBs, etc if they are available. I'm not particularly interested in
              failover at either EJB or JMS level, but rather HttpSession level so
              that if a WL server goes down another could pick up perhaps by by the
              user re-requesting whatever operation failed.
              If this is not possible because of the way clustering works (homogenous)
              then is there some other way to solve this problem. I basically do not
              want a cluster where there is a single point of failure (other than DB
              server) for any given piece of functionality.
              Thanks for any help.
              Alex
              

    First and easiest,
              Just create a set of JMS tables for each server in your db. You can specify
              a JMS tablename prefix in your weblogic properties for eash server using
              weblogic.jms.tableNamePrefix=W5
              as long as the prefix is only two chars. This worked great for us until we
              decided to drop JMS because of its memory leaks. We were having to restart
              our servers every 8 hours.
              Second, get rid of JMS. Dirty little secret:You don't need JMS to do
              asynchronous work! You can use threads inside of J2EE and not break J2EE.
              Can't tell you how for proprietary reasons but you can.
              Mica Cooper
              

  • Why are my JMS messages automatically dequeued without consumer?

    I created a simple in-memory JMS queue.
    Now I wrote a BPEL process which writes (successfully ?) JMS message to this JMS queue.
    Another consuming BPEL process is deployed but not started.
    However I cannot see them in MBean JMSDestinationResource on the OC4J Enterprise Manager Web page.
    When I tell the AppServer to browse all currently existing (and waiting) JMS message then there are none.
    However the statistics for this queue show 17 messagesEnqueued and 17 messagesDequeued Messages.
    It seems to me that my JMS messages are automatically dequeued. But why?
    Are in-memory JMS messages not persistent (as long as the AppServer is up and running) ?
    Do I have to set a certain preference to let JMS live in the Queue as long as they are not retrieved by another BPEL process?
    Furthermore I tried the following:
    I started a consuming BPEL process. Yes, he is waiting at the JMS adapter until a new JMS message arrive.
    Then I send from the first BPEL process a JMS message. But even when consumption is possible the JMS message is dequeued and not forwarded to the consumer.
    Why?
    Peter

    It seems to me that my JMS messages are automatically dequeued. But why?
    This is how BPEL PM is designed; The activation-agent is running that belongs to the BPEL process. When a message arrives in a Queue or Table or File it is read into the dehydration store. Then an instance of the appropriate BPEL process is started. This functionality makes the system more stabel and reliable when something is goingin wrong in quees/files/db or any adapter that is used for polling.Are in-memory JMS messages not persistent (as long as the AppServer is up and running) ?
    As you desribed: in-memory messages are only persistent in memory, if you restart the server, the messages are gone.Do I have to set a certain preference to let JMS live in the Queue as long as they are not retrieved by another BPEL process?
    No you can not.Marc
    http://orasoa.blogspot.com

Maybe you are looking for

  • Install agent on solaris 10 using agent deploy application?

    Hi all, I have installed 10g grid control on solaris 10 with new repository database on same machine. The OMS, and agent is running on grid host. Now I want to add other hosts (targets) into grid. For this, I have to install agent on target hosts. I

  • Cisco ACS v5.3 - Unable to define Device Filter

    Dear Community! I'm new to ACS version 5 family and I would like to ask if anybody has already experienced the following strange issue with ACS version 5.3.0.40 GUI: I have several AAA clients already defined in the "Network Devices and AAA Clients"

  • Moving Exchange 2003 mailboxes to Exchange 2010

    Hello I have a new domain with Exchange 2010 server. I plan to join users to this domain but would like to know the best plan in moving the existing Exchange 2003 mailboxes over. Can I just import the PST files into their new Exhaneg 2010 mailboxes o

  • Binding to double = UpdateSourceTrigger=PropertyChanged.

    <TextBox Text="{Binding eMin,UpdateSourceTrigger=PropertyChanged,StringFormat={}{0:0.##}}" Grid.Row="1" Grid.Column="1" Style="{DynamicResource ReadOnlyStyle}"/> public double eMin get { return _eMin; } set { _eMin = value; NotifyPropertyChanged(); B

  • Songs " not available"

    I have some music that is not available in the time section. The songs won't play on my ipod or on my computer. I have deleted them and reinstalled the cds (which have been purchased from a store) and I have uninstalled and reinstalled itunes. Does a