MDB/Topic/WLS cluster question

          Hi
          I was going through some WLS 8.1 docs on JMS and had a question abt Topics & WLS
          in cluster config where say I have 3 servers with say server#1 hosting the Topic
          [not a distributed destination]. I have an an ear file containing an MDB with
          no pool size limit. After deploying the ear in the cluster - lets say that each
          server on the cluster has 5 instances of the MDB [just an example] and a message
          is published on the Topic.
          Q1>Will all the 3 servers get a [one and only one] copy of that message? [my guess
          is yes]
          Q2>Only 1 instance [out of 5] of the MDB/per server will get the message - right?
          Q3> Had I had a separate deployment of the same MDB class in the EAR file for
          the same Topic - thats just going to get treated as a completely separate subscriber
          independent of the first MDB though the implementing class is the same - right?
          thanks
          Anamitra
          

          Anamitra wrote:
          > Hi
          > I was going through some WLS 8.1 docs on JMS and had a question abt Topics & WLS
          > in cluster config where say I have 3 servers with say server#1 hosting the Topic
          > [not a distributed destination]. I have an an ear file containing an MDB with
          > no pool size limit. After deploying the ear in the cluster - lets say that each
          > server on the cluster has 5 instances of the MDB [just an example] and a message
          > is published on the Topic.
          >
          > Q1>Will all the 3 servers get a [one and only one] copy of that message? [my guess
          > is yes]
          Yes.
          > Q2>Only 1 instance [out of 5] of the MDB/per server will get the message - right?
          Yes.
          > Q3> Had I had a separate deployment of the same MDB class in the EAR file for
          > the same Topic - thats just going to get treated as a completely separate subscriber
          > independent of the first MDB though the implementing class is the same - right?
          Yes.
          >
          > thanks
          > Anamitra
          >
          For a little more information, I'm attaching notes on durable
          subscriber MDBs.
          A JMS durable subscription is uniquely identified within a cluster by a combination of "connection-id" and "subscription-id". Only one active connection may use a particular "connection-id" within a WebLogic cluster.
          In WebLogic 8.1 and previous, a durable topic subscriber MDB uses its name to generate its client-id. Since JMS enforces uniqueness on this client-id, this means that if a durable subscriber MDB is deployed to multiple servers only one server will be able to connect. Some applications want a different behavior where
          each MDB pool on each server gets its own durable subscription.
          The MDB connection id, which is unique within a cluster, comes from:
          1) The "ClientId" attribute configured on the WebLogic connection factory.
          This defaults to null. Note that if the ClientId is set on a connection
          factory, only one connection created by the factory
          may be active at a time.
          2) If (1) is not set, then, as with the subscriber-id,
          the connection-id is derived from jms-client-id descriptor attribute:
          <jms-client-id>MyClientID</jms-client-id>
          (the weblogic dtd)
          3) If (1) and (2) are not set, then, as with the subscriber-id,
          the connection-id is derived from the ejb name.
          The MDB durable subscription id, which must be unique on its topic, comes from:
          1) <jms-client-id>MyClientID</jms-client-id>
          (the weblogic dtd)
          2) if (1) is not set then the client-id
          comes from the ejb name.
          The above prevents a durable topic subscriber MDB from running on multiple servers. When an instance of the MDB starts on another server, it deploys successfully, but a conflict is detected and the MDB fails to fully connect to JMS. The work-around is the following:
          A) Create a custom connection-factory for each server:
          1) configure "JNDIName" to the same value across all servers
          ("myMDBCF" in this example)
          2) configure "ClientId" to a unique value per server
          3) enable "UserTransactionsEnabled"
          4) enable "XAConnectionFactoryEnabled"
          5) set "AcknowledgePolicy" to "ACKNOWLEDGE_PREVIOUS"
          6) target the CF at a single WebLogic server
          (Number 5 is required for non-transactional topic MDBs)
          B) In the MDB's weblogic-ejb-jar.xml descriptor, set the MDB's connection
          factory to the JNDI name of the custom connection factories configured in
          (A). Optionally, also specify the subscriber-id via the jms-client-id
          attribute.
          <weblogic-ejb-jar>
          <weblogic-enterprise-bean>
          <ejb-name>exampleBean</ejb-name>
          <message-driven-descriptor>
          <connection-factory-jndi-name>myMDBCF</connection-factory-jndi-name>
          <jms-client-id>myClientID</jms-client-id>
          </message-driven-descriptor>
          </weblogic-enterprise-bean>
          </weblogic-ejb-jar>
          C) Target the application at the same servers that have the custom connection
          factories targeted at them.
          Notes/Limitations:
          1) If the MDB is moved from one server to another, the MDB's corresponding
          connection-factory must be moved with it.
          2) This work-around will not work if the destination is not in the same
          cluster as the MDB. (The MDB can not use the local connection factory, which
          contains the connection-id, as connection factories do not work unless they
          are in the same cluster as the destination.)
          3) This work-around will not work for non-WebLogic JMS topics.
          4) A copy of each message is sent to each to each server's MDB pool.
          

Similar Messages

  • Front-end/back-end cluster question

    [att1.html]
              

    Patrick Power wrote:
              > Thanx for your reply Prasad. I was surprised none of the Bea engineers
              > wished to touch this one. What do you suppose is up with that? Either
              > they are too busy, or possibly my question is too dumb.
              >
              I am from BEA so its not that we are not responding ;).
              >
              > Back to the issue: Yes, we will NES bridge/proxy into servlet front-end
              > cluster, potentially with Directors on the very front of the topology for
              > balancing. Your diagram as such:
              >
              > <Netscape/IIS/Apache/WLS FRONT END> ----- <CLUSTER OF WEBLOGIC SERVER
              > > SERVING SERVLETS> --- <CLUSTER OF WEBLOGIC SERVERS SERVING EJB>
              >
              > 1) Does <Netscape/IIS/Apache/WLS FRONT END> mean NES with proxy shared lib,
              > with a WLS service definition into cluster in obj.conf? I assume yes.
              Yes.
              >
              > 2) I would assume that <CLUSTER OF WEBLOGIC SERVERS SERVING SERVLETS> would
              > need the WLS HttpClusterServlet to the <CLUSTER OF WEBLOGIC SERVERS SERVING
              > EJB> all the way in the back.
              No. I was splitting presentation logic (namely servlets and jsp) and business
              logic (ejb) into two layers. Again you don't have to split it into two. You can
              colocate them both together. You could use NES or IIS or Apache or WLS. You
              don't need HttpClusterServlet.
              Lets get this straight.
              1. You need our proxy plugin for failover and to load balance the request that
              are going to presentation logic.
              2. From presentation logic layer, when you talk to backend business logic
              providers (like ejb cluster), if you use stateless session beans we provide
              failover and load balancing. In future we will support clustered stateful
              session beans as well. Therefore you don't need load balancer here.
              3. HttpClusterServlet should run only in front of presentation logic cluster and
              also it supports http only.
              Hope this helps.
              - Prasad
              > The NES proxy would only proxy into the f/e
              > cluster, right? You're not suggesting an external proxy of some type, are
              > you? The HttpClusterServlet is for WLS cluster-to-cluster proxies.
              > 3) A load balancer between the wls f/e and wls b/e clusters? That doesn't
              > seem applicable here. Once again, it should be HttpClusterServlet for WLS
              > cluster-to-cluster proxies.
              > 4) "use two or three proxy servers to avoid single point of failure."
              > Hmmm, once again - are we talking the WLS HttpClusterServlet proxy? Well,
              > that's the inital question: Can I have more than one HttpClusterServlet
              > proxy in the front-end cluster, proxying to the back-end cluster?
              > Otherwise, internally from this WLS architecture perspective, it is a single
              > point of failure.
              >
              > An example: 10 instances in f/e cluster. can more than one of these
              > instances have the WLS HttpClusterServlet proxy to the b/e cluster? Or, are
              > there instances of WLS HttpClusterServlet proxy in all 10 f/e cluster
              > instances?
              >
              > Cheers, Pat
              >
              > Prasad Peddada <[email protected]> wrote in message
              > news:[email protected]...
              > >
              > >
              > > Patrick Power wrote:
              > >
              > > > I know that this topic was addressed to some degree here in an earlier
              > > > posting, but I still have a question regarding the architecture
              > > > design:
              > > >
              > > > If configuring a front-end cluster for servlets/sessions and a
              > > > back-end cluster for remote services -- you route requests to the
              > > > back-end using the WLS proxy servlet. ok, got that part.
              > >
              > > Not quite. The typical scenario is
              > >
              > > <Netscape/IIS/Apache/WLS FRONT END> ----- <CLUSTER OF WEBLOGIC SERVER
              > > SERVING SERVLETS> --- <CLUSTER OF WEBLOGIC SERVERS SERVING EJB>
              > >
              > > You don't proxy and serve servlets from the same server.
              > >
              > > >
              > > > The question: Is there a single instance of the wls proxy servlet in
              > > > the front-end cluster? Or, is it on every instance in the front-end
              > > > cluster? What is the failover mechanism, in the case of a single
              > > > instance of proxy servlet in the f-e cluster failing?
              > >
              > > To prevent that you need to use some kind of h/w or software load
              > > balancer and then use two or three proxy servers to avoid single point
              > > of failure.
              > >
              > > > Is it a single point of failure between the 2 clusters?
              > > >
              > > > Thanx in advance for your help.
              > > >
              > > > BTW, I think Wei, Kumar and the other Bea folks cruising this group
              > > > have been doing a bang-up job of providing badly-needed detail on this
              > > > subject area - material this largely absent from the documentation.
              > > > Good job.
              > > >
              > > >
              > >
              > > --
              > > Cheers
              > >
              > > - Prasad
              > >
              > >
              

  • JMS/Queue cluster question

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

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

  • MDB topic listener and concurrent processing

    Hello to everybody.
    I ve prototyped simple db publisher ,which publishes changed data from database to JMS topic. Then I have my MDB which listens on JMS topic.
    I setup and implemented all correctly and it worked. There was 1 consumer = 1 mdb instance. Then I tried to do load testing , So I triggered 8000 changes from database. The db adapter did the job and published the 8000 messages on the JMS topic in a while. To mimic processing in MDB I put the sleep(10seconds) in MDB.
    MDB topic processing seems to me as not concurrent one. Why? I observed 10 message decrease with 5-10 seconds.
    What I expected was: concurrent processing of 8000 JMS messages by 1 MDB (so MDB is poolable component isnt it?).
    So for 500 instances of topic MDB and 8000 messages on the JMS topic, I expected at least 8000/500 X 10 = 160 seconds to process message load.
    I am using WLS 816.
    Can You give me some hits.
    Thanks
    Roman

    I did the same test on Weblogic 10 and it worked as expected. MDB durable subscriber consumed 8000 messages (each msg processing had 10 secs sleep inside.) within 2 minutes. So it is ok.
    But why it did not worked on WLS 8.1? Is this a bug ?

  • RMI/IIOP + WLS cluster

    Two questions:
              Can I access a WLS cluster using RMI/IIOP?
              If positive, will the load-balancing and fail-over work the same way as with
              T3?
              Thanks
              Serhii Sokolenko
              

              Serhii Sokolenko wrote:
              > Two questions:
              >
              > Can I access a WLS cluster using RMI/IIOP?
              yes you can
              >
              >
              > If positive, will the load-balancing and fail-over work the same way as with
              > T3?
              no because IIOP stubs are not smart and cluster-aware
              >
              >
              > Thanks
              > Serhii Sokolenko
              

  • Cluster Question

              If I have a cluster which contains 2 nodes (e.g 192.168.0.1 and 192.168.0.2). In the
              admin console, I need to provide a cluster address which I might put 192.168.0.1
              and 192.168.0.2.
              In this case, I might need to bind those ip addresses in a single DNS and put it
              as the cluster address.
              How can I bind those ip addresses ? Do I need a DNS server to do that ?
              another question is, when the WLS cluster receive a request, where is the first point
              which is responsible for passing the requests into the nodes ? Is that a java class
              or ?
              

              Hello Ramy,
              If I have a proxy, then I might need to also have a cluster for the proxy server
              as well. Does it mean that I need a local director in front of the proxy cluster
              thanks,
              Friend
              "Ramy Saad" <[email protected]> wrote:
              >
              >Hello Friend,
              >
              >I think you need a proxy-server (for example with load balancing) which
              >can handel
              >a cluster. In your application you can use the IP-Address of the proxy-server
              >and
              >the proxy decides to which WLS the connection will be established. I think
              >a plug-in
              >for the appache server is shipped with the bea software...
              >
              >Regards,
              >Ramy.
              >
              >"Friend" <[email protected]> wrote:
              >>
              >>If I have a cluster which contains 2 nodes (e.g 192.168.0.1 and 192.168.0.2).
              >>In the
              >>admin console, I need to provide a cluster address which I might put 192.168.0.1
              >>and 192.168.0.2.
              >>In this case, I might need to bind those ip addresses in a single DNS and
              >>put it
              >>as the cluster address.
              >>How can I bind those ip addresses ? Do I need a DNS server to do that ?
              >>another question is, when the WLS cluster receive a request, where is the
              >>first point
              >>which is responsible for passing the requests into the nodes ? Is that
              >a
              >>java class
              >>or ?
              >
              

  • EJB 3.0 local lookup from POJO in WLS Cluster

    Hello,
    I'm developing on JDeveloper Studio Edition Version 11.1.2.3.0 and deploying to a WebLogic 10.3.5 Cluster.
    I have developed an EJB 3.0 stateless session bean and I need to invoke it from a POJO within the same EAR, specifically an ADF EntityImpl Class.
    Up to this point, I've only invoked EJBs using injection via an @EJB annotation, and have never done a full lookup.
    Could somebody please provide a verbose instruction on how to obtain invoke an EJB 3.0 SLSB via local interface from a POJO when running on a WLS cluster?
    As I see it I have two problems to solve.
    1) Obtaining a reference to the initial context in a cluster.
    2) Using that to get a reference to the local interface of the bean, which I don't think is on the global JNDI tree.
    Many thanks.
    Edited by: user576183 on Dec 5, 2012 4:16 PM

    Re: Unable to lookup in InitialContext a Local EJB in Weblogic 10.3.5 (EJB 3.0)

  • MDB in a Cluster using Local JMS Queue (not distributed)

              Can I create a MDB that receives messages from a Local JMS Queue (created on each
              node) rather than a distributed queue?
              When I try to deploy such an MDB I get the following exception:
              weblogic.management.DeploymentException: Exception:weblogic.management.ApplicationException:
              activate failed for TestLocalMDBCluster Module: TestLocalMDBCluster Error: Exception
              activating module: EJBModule(TestLocalMDBCluster,status=PREPARED) Unable to deploy
              EJB: AsyncProcessor from TestLocalMDBCluster.jar: [EJB:011046]Unable to create
              EJBRuntimeMBean. javax.management.InstanceAlreadyExistsException: mydomain:ApplicationRuntime=Node2_TestLocalMDBCluster,EJBComponentRuntime=Node2_TestLocalMDBCluster_TestLocalMDBCluster,Location=Node2,Name=Node2_TestLocalMDBCluster_TestLocalMDBCluster_AsyncProcessor_jms/myserver,ServerRuntime=Node2,Type=MessageDrivenEJBRuntime
              at com.sun.management.jmx.RepositorySupport.addMBean(RepositorySupport.java:134)
              at com.sun.management.jmx.MBeanServerImpl.internal_addObject(MBeanServerImpl.java:2371)
              at com.sun.management.jmx.MBeanServerImpl.registerMBean(MBeanServerImpl.java:876)
              at weblogic.management.internal.RemoteMBeanServerImpl.private_registerMBean(RemoteMBeanServerImpl.java:582)
              at weblogic.management.internal.RemoteMBeanServerImpl.registerMBean(RemoteMBeanServerImpl.java:524)
              at weblogic.management.runtime.RuntimeMBeanDelegate.register(RuntimeMBeanDelegate.java:166)
              at weblogic.management.runtime.RuntimeMBeanDelegate.<init>(RuntimeMBeanDelegate.java:122)
              at weblogic.management.runtime.RuntimeMBeanDelegate.<init>(RuntimeMBeanDelegate.java:85)
              at weblogic.ejb20.monitoring.EJBRuntimeMBeanImpl.<init>(EJBRuntimeMBeanImpl.java:33)
              at weblogic.ejb20.monitoring.MessageDrivenEJBRuntimeMBeanImpl.<init>(MessageDrivenEJBRuntimeMBeanImpl.java:30)
              at weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.initPool(MessageDrivenBeanPoolInfoImpl.java:182)
              at weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.activate(MessageDrivenBeanPoolInfoImpl.java:245)
              at weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.activatePoolInfo(MessageDrivenBeanInfoImpl.java:474)
              at weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.deploy(MessageDrivenBeanInfoImpl.java:440)
              at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1327) at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:610)
              at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:3127)
              at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:2081)
              at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:2062)
              at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.activateContainer(SlaveDeployer.java:2592)
              at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(SlaveDeployer.java:2515)
              at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeployer.java:2317)
              at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDeployer.java:608)
              at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHandler.java:35)
              at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
              Is there any way to do this?
              

    I assume you are using queues.
              I truly wonder what you are doing different. Since the
              error is occuring outside of JMS and in the EJB - before JMS is called -
              I suggest posting to the ejb newsgroup.
              Note that yours is a standard use case which distributed destinations
              are actually specifically designed for (if you
              are using customer connection factories, just
              make sure ServerAffinity is enabled on the connection factory to
              ensure that clients always connect to the local physical destination,
              configure the MDB to refer to the JNDI name of the distributed
              destination, and then target the MDB to the cluster - an MDB pool
              will then automatically be dedicated to each physical destination).
              Tom
              Mark Colwell wrote:
              > Nope. It happens every time we try the scenario no matter what the application
              > is or which cluster. It always happens if we try to deploy even just a single
              > MDB (no other beans in the jar) to a cluster where the queue specified in the
              > deployment descripter is a local queue created on each node in the cluster. When
              > the jar is deployed we get the error.
              >
              > We have a strange situation were we really need the queue to be local and not
              > distributed but existing on every node. We can create all the local queues no
              > problem but trying to then deploy the application goes boom.
              >
              > Thanks for the response!
              >
              > Cheers,
              > Mark
              >
              > Tom Barnes <[email protected].bea.com>
              > wrote:
              >
              >>Mark Colwell wrote:
              >>
              >>
              >>>Can I create a MDB that receives messages from a Local JMS Queue (created
              >>
              >>on each
              >>
              >>>node) rather than a distributed queue?
              >>
              >>Yes. In fact this is the most common use case.
              >>
              >>
              >>>When I try to deploy such an MDB I get the following exception:
              >>
              >>I don't recall seeing this exception before. It looks like a naming
              >>conflict - it appears that somehow something is already running with
              >>the same name. Are you somehow deploying the same app twice?
              >>
              >>javax.management.InstanceAlreadyExistsException:
              >>mydomain:ApplicationRuntime=Node2_TestLocalMDBCluster,
              >>EJBComponentRuntime=Node2_TestLocalMDBCluster_TestLocalMDBCluster,
              >>Location=Node2,
              >>Name=Node2_TestLocalMDBCluster_TestLocalMDBCluster_AsyncProcessor_jms/myserver,
              >>ServerRuntime=Node2,
              >>Type=MessageDrivenEJBRuntime
              >>
              >>FYI: As of one or two weeks ago, the MDB section of the
              >>EJB docs has been heavily updated. I highly recommend
              >>reading it.
              >>
              >>
              >>>weblogic.management.DeploymentException: Exception:weblogic.management.ApplicationException:
              >>>activate failed for TestLocalMDBCluster Module: TestLocalMDBCluster
              >>
              >>Error: Exception
              >>
              >>>activating module: EJBModule(TestLocalMDBCluster,status=PREPARED) Unable
              >>
              >>to deploy
              >>
              >>>EJB: AsyncProcessor from TestLocalMDBCluster.jar: [EJB:011046]Unable
              >>
              >>to create
              >>
              >>>EJBRuntimeMBean. javax.management.InstanceAlreadyExistsException: mydomain:ApplicationRuntime=Node2_TestLocalMDBCluster,EJBComponentRuntime=Node2_TestLocalMDBCluster_TestLocalMDBCluster,Location=Node2,Name=Node2_TestLocalMDBCluster_TestLocalMDBCluster_AsyncProcessor_jms/myserver,ServerRuntime=Node2,Type=MessageDrivenEJBRuntime
              >>>at com.sun.management.jmx.RepositorySupport.addMBean(RepositorySupport.java:134)
              >>>at com.sun.management.jmx.MBeanServerImpl.internal_addObject(MBeanServerImpl.java:2371)
              >>>at com.sun.management.jmx.MBeanServerImpl.registerMBean(MBeanServerImpl.java:876)
              >>>at weblogic.management.internal.RemoteMBeanServerImpl.private_registerMBean(RemoteMBeanServerImpl.java:582)
              >>>at weblogic.management.internal.RemoteMBeanServerImpl.registerMBean(RemoteMBeanServerImpl.java:524)
              >>>at weblogic.management.runtime.RuntimeMBeanDelegate.register(RuntimeMBeanDelegate.java:166)
              >>>at weblogic.management.runtime.RuntimeMBeanDelegate.<init>(RuntimeMBeanDelegate.java:122)
              >>>at weblogic.management.runtime.RuntimeMBeanDelegate.<init>(RuntimeMBeanDelegate.java:85)
              >>>at weblogic.ejb20.monitoring.EJBRuntimeMBeanImpl.<init>(EJBRuntimeMBeanImpl.java:33)
              >>>at weblogic.ejb20.monitoring.MessageDrivenEJBRuntimeMBeanImpl.<init>(MessageDrivenEJBRuntimeMBeanImpl.java:30)
              >>>at weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.initPool(MessageDrivenBeanPoolInfoImpl.java:182)
              >>>at weblogic.ejb20.deployer.MessageDrivenBeanPoolInfoImpl.activate(MessageDrivenBeanPoolInfoImpl.java:245)
              >>>at weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.activatePoolInfo(MessageDrivenBeanInfoImpl.java:474)
              >>>at weblogic.ejb20.deployer.MessageDrivenBeanInfoImpl.deploy(MessageDrivenBeanInfoImpl.java:440)
              >>>at weblogic.ejb20.deployer.EJBDeployer.activate(EJBDeployer.java:1327)
              >>
              >>at weblogic.ejb20.deployer.EJBModule.activate(EJBModule.java:610)
              >>
              >>>at weblogic.j2ee.J2EEApplicationContainer.activateModule(J2EEApplicationContainer.java:3127)
              >>>at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:2081)
              >>>at weblogic.j2ee.J2EEApplicationContainer.activate(J2EEApplicationContainer.java:2062)
              >>>at weblogic.management.deploy.slave.SlaveDeployer$ComponentActivateTask.activateContainer(SlaveDeployer.java:2592)
              >>>at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.doCommit(SlaveDeployer.java:2515)
              >>>at weblogic.management.deploy.slave.SlaveDeployer$Task.commit(SlaveDeployer.java:2317)
              >>>at weblogic.management.deploy.slave.SlaveDeployer.commitUpdate(SlaveDeployer.java:608)
              >>>at weblogic.drs.internal.SlaveCallbackHandler$2.execute(SlaveCallbackHandler.java:35)
              >>>at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at
              >>
              >>weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
              >>
              >>>Is there any way to do this?
              >>
              >
              

  • Deploying MDB in a cluster...

    Have any one been successful at deploying a Message Driven Bean in a
              cluster. The problem I am running in to is that on the second machine the
              MDB tries to deploy but does not find the name of the queue in the JNDI
              space. This is due to the fact that the JNDI replication has not occured
              when the second server is starting up. Later, when the JNDI replication has
              occured, the queue name DOES appear in the JNDI tree, but it's too late for
              the MDB which failed to deploy.
              Has any one gotten around this problem? Surely, there must be someone out
              there who is also trying to deploy MDB in a cluster.
              Thanks.
              -AP_
              

    Have any one been successful at deploying a Message Driven Bean in a
              cluster. The problem I am running in to is that on the second machine the
              MDB tries to deploy but does not find the name of the queue in the JNDI
              space. This is due to the fact that the JNDI replication has not occured
              when the second server is starting up. Later, when the JNDI replication has
              occured, the queue name DOES appear in the JNDI tree, but it's too late for
              the MDB which failed to deploy.
              Has any one gotten around this problem? Surely, there must be someone out
              there who is also trying to deploy MDB in a cluster.
              Thanks.
              -AP_
              

  • A startup class to enable MQ Queues to trigger MDBs in WLS 6.1(sp4)

              Hi,
              I am hoping for references to documentation or opinions on the following method
              allowing the use of MQ queues to drive MDBs in WLS. The technique involves rebinding
              the connection factory in jndi at "weblogic.jms.MessageDrivenBeanConnectionFactory"
              with MQs connection factory.
              I read in various newsgroup posts that replacing WLS' ConnectionFactory with MQ's
              in a startup class will not allow MDBs to be linked to an MQ queue because startup
              classes are run after MDB deployment during startup. However I found some unused
              in-house code which appeared to do just that and it works.
              Here is the code in abbreviated form:
              public String startup(String str, Hashtable args) throws Exception
                   bindMQFactory();
                   bindMQQueues();
                   return "";
              private void bindMQFactory() throws Exception
                   // Create MQ Factory and configure it
                   MQQueueConnectionFactory factory = new MQQueueConnectionFactory();
                   factory.setChannel(channel );
                   factory.setHostName(host);
                   factory.setPort(Integer.parseInt(port));
                   factory.setQueueManager(qmanager);
                   factory.setTransportType( JMSC.MQJMS_TP_CLIENT_MQ_TCPIP );
                   // bind connection factory into WLS JNDI for later use by clients
                   _wlsContext.bind( connectionFactoryJndi, factory );
                   // Force mq connection factory to be the one used for mdb's
                   _wlsContext.rebind("weblogic.jms.MessageDrivenBeanConnectionFactory", factory);
              private void bindMQQueue() throws Exception
                   // create queue and configure it
                   MQQueue queue = new MQQueue();
                   queue.setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ );
                   queue.setBaseQueueName( mqQueueName );
                   // bind queue in WLS JNDI
                   _wlsContext.bind( wlsJndi, queue );
              Thanks in advance for any comments or opinions on the above.
              regards
              Martin
              

    Start with the white-paper:
              "Using Foreign JMS Providers with WebLogic Server"
              Note that to get transactional behavior you
              will need to use the WebLogic Messaging Bridge feature.
              Note that integrating MQ is easier in 8.1 - consider
              using WL 8.1 if you can.
              One more comment in-line.
              Martin wrote:
              > Hi,
              >
              > I am hoping for references to documentation or opinions on the following method
              > allowing the use of MQ queues to drive MDBs in WLS. The technique involves rebinding
              > the connection factory in jndi at "weblogic.jms.MessageDrivenBeanConnectionFactory"
              > with MQs connection factory.
              Not recommended. Highly not recommended. Do not use the same name
              as the internal factory. Create your own name for a CF, and change the
              weblogic ejb jar to reference your name. The above white-paper
              states how to do this.
              >
              > I read in various newsgroup posts that replacing WLS' ConnectionFactory with MQ's
              > in a startup class will not allow MDBs to be linked to an MQ queue because startup
              > classes are run after MDB deployment during startup. However I found some unused
              > in-house code which appeared to do just that and it works.
              >
              > Here is the code in abbreviated form:
              > public String startup(String str, Hashtable args) throws Exception
              > {
              >      bindMQFactory();
              >      bindMQQueues();
              >
              >      return "";
              > }
              >
              > private void bindMQFactory() throws Exception
              > {
              >
              >      // Create MQ Factory and configure it
              >      MQQueueConnectionFactory factory = new MQQueueConnectionFactory();
              >      factory.setChannel(channel );
              >      factory.setHostName(host);
              >      factory.setPort(Integer.parseInt(port));
              >      factory.setQueueManager(qmanager);
              >      factory.setTransportType( JMSC.MQJMS_TP_CLIENT_MQ_TCPIP );
              >
              >      // bind connection factory into WLS JNDI for later use by clients
              >      _wlsContext.bind( connectionFactoryJndi, factory );
              >
              >      // Force mq connection factory to be the one used for mdb's
              >      _wlsContext.rebind("weblogic.jms.MessageDrivenBeanConnectionFactory", factory);
              > }
              >
              > private void bindMQQueue() throws Exception
              > {
              >      // create queue and configure it
              >      MQQueue queue = new MQQueue();
              >      queue.setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ );
              >      queue.setBaseQueueName( mqQueueName );
              >
              >      // bind queue in WLS JNDI
              >      _wlsContext.bind( wlsJndi, queue );
              > }
              >
              > Thanks in advance for any comments or opinions on the above.
              >
              > regards
              >
              > Martin
              

  • Is Struts framework WLS cluster-safe?

    In a clustered WLS environment, there are programming requirements
              having to do with the use of the session object ("Session Programming
              Requirements" in http://edocs.bea.com/wls/docs61/cluster/servlet.html).
              The Jakarta Struts framework uses the session object extensively.
              Does anyone know whether Struts complies with the above requirements
              and is therefore WLS cluster-safe? Has anyone deployed a Struts-based
              application to a WLS cluster?
              

    Let's look at it without synchronization:
    Thread A calls execute() method (no class variables that are not constants)
    Thread B calls execute() method (no class variables that are not constants)
    Let's look at it with synchronization:
    Thread A calls execute() method (synchronization check succeeds)
    Thread B calls execute() method (synchronization check hangs until thread A is done and releases the lock)
    Let's say that the execute() method does something with decent latency (like accessing a network resource or a database). Now, you eventually end up with a 'queue' of threads waiting for the lock to be released. This is a scaling constraint. It introduces a bottleneck into your application.
    Now, this is sometimes unavoidable. For example, database connections are a scarce resource. The solution to this is a connection pool, which helps, but does not eliminate the bottleneck. Wherever possible, you want to avoid scaling bottlenecks.
    You have the ability to do so in your case. Try to avoid anything in your Action class itself (a class variable) that is anything other than a String or a primitive and ensure that any of those variables are constants (static and final). Now, these variables are 'thread-safe' because they are constant and immutable.
    For your execute() method, only use variables that are in the method signature itself or created/declared within the execute() method. This will ensure your Action class is in fact thread-safe. The minute you declare a mutable class variable (or a class like List that allows you to manipulate its contents), you introduce the possibility of a race condition and thread-unsafety (if that's a real term).
    - Saish

  • WLS 10 MDB migration within a WLS cluster

    Hi,
    I'm trying to get MDB migration working. From my reading in the documentation regarding this topic, it appears that I have to deploy my MDB to all of the cluster server instances.
    Ex, if the JMS server that my MDB is using is on a migratable target and it composes of srv1 and srv2, then I also have to deploy my MDB to srv1 and srv2 in order to get some form of "migration" working.
    What I want to know is if it's possible to do a real migration like migrating JMS service for example? Instead of doing this multiple deployment of my MDB.
    this snippet from http://edocs.bea.com/wls/docs100/ejb/message_beans.html#wp1168630 seems to be talking about the above setup.
    MDBs do not have migratable targets. Instead, an MDB automatically detects the JMS Server migration target during deployment, and uses that as its migratable target. You must ensure that MDB are deployed everywhere that a JMS Server is deployed. You can do this in two ways:
    * Deploy MDBs homogeneously to the cluster.
    * Match an MDB’s targets to the JMS migratable target list in the config.xml file for the server instance’s cluster. The MDB target server name must match the JMS migratable target list, or MDB migration will fail. For more information on configuring migratable targets, see “Defining Migratable Target Servers in a Cluster” in Using WebLogic Server Clusters.

    Hi,
    Thanks for the information.
    Can you explain why this is happening though?
    I have a distributed queue with two members (or specifically two JMS servers), which is targetted across the cluster (two servers cluster).
    I have 1 MDB that is targetted to one of the JMS server in the distributed queue.
    I deployed the MDB to the whole cluster. During monitoring, I noticed that two copies of the MDB are resident at startup (1 active on the cluster instance where the JMS server is hosting the source destination; the other is active residing on the other cluster instance). When I manually migrate the JMS server, the MDBs' status just switch due to one able to connect while the other cannot connect anymore.
    So, this is what's to be expected of MDB migration, correct? In this simple scenario for example, there will always be 1 resident running/suspended copy of the MDB in memory within each cluster server instance. The MDB migration is just simply switching between one cluster instance's resident MDB to another instance's.
    Is this correct?
    Thanks.

  • Problem having a MDB connect to a remote JMS Topic (WLS 6.1 sp3)

              Hi, I am having problem making an MDB listen to a remote JMS Topic. Here's the
              scenario:
              > Two Weblogic servers (6.1 sp3) running on the same machine (W2K) - they are
              not part of a cluster......both are independent servers
              > One WLS is listening on port 7001 (Domain=WLSDomain1; Target=Server1) and the
              second one on 8001 (Domain=WLSDomain2; Target=Server1 {This is not a typo, the
              target is Server1})
              > In WLSDomain1/Server1, I have a JMS Topic defined as follows (in its config.xml
              file):
              <JMSServer Name="EventServicesJMSServer"
              Store="ESJMSServerFileStore" Targets="Server1">
              <JMSTopic JNDIName="jms/EventServicesTopic7001"
              Name="jms/EventServicesTopic7001" StoreEnabled="true"/>
              </JMSServer>
              > In WLSDomain2/Server1, I have a JMS Topic defined as follows (in config.xml
              file):
              <JMSServer Name="EventServicesJMSServer"
              Store="ESJMSServerFileStore" Targets="Server1">
              <JMSTopic JNDIName="jms/EventServicesTopic8001"
              Name="jms/EventServicesTopic8001" StoreEnabled="true"/>
              </JMSServer>
              > An MDB is deployed on WLSDomain1/Server1 with the following elements in its
              weblogic-jar.xml file (I haven't included the entire weblogic-jar.xml file, only
              the relevant info):
              <message-driven-descriptor>
              <pool>
              <max-beans-in-free-pool>1</max-beans-in-free-pool>
              <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
              </pool>
              <!-- This MDB is defined to listen to a Topic in another WLS Server running
              on port 8001 -->
              <destination-jndi-name>jms/EventServicesTopic8001</destination-jndi-name>
              <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
              <provider-url>t3://localhost:8001</provider-url>
              <connection-factory-jndi-name>weblogic/jms/ConnectionFactory</connection-factory-jndi-name>
              </message-driven-descriptor>
              > An MDB is deployed on WLSDomain2/Server1 with the following elements in its
              weblogic-jar.xml file (I haven't included the entire weblogic-jar.xml file, only
              the relevant info):
              <message-driven-descriptor>
              <pool>
              <max-beans-in-free-pool>1</max-beans-in-free-pool>
              <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
              </pool>
              <!-- This MDB is defined to listen to a Topic in another WLS Server running
              on port 7001 -->
              <destination-jndi-name>jms/EventServicesTopic7001</destination-jndi-name>
              <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
              <provider-url>t3://localhost:7001</provider-url>
              <connection-factory-jndi-name>weblogic/jms/ConnectionFactory</connection-factory-jndi-name>
              </message-driven-descriptor>
              > After starting both the WLS servers, I've verified that they have made connections
              to each other; the Topics are defined in the JNDI tree of the respective servers;
              and the MDBs have been deployed in their respective servers. But the MDBs can't
              see/connect to their respective JMS destination. Here's the error message and
              stack trace from one the WLS server's trace file:
              <Apr 17, 2003 4:58:25 PM GMT> <Warning> <EJB> <The Message-Driven EJB: com.manu.
              common.server.objectServices.CSMEventListenerMDB_8001 is unable to connect to
              the JMS destination: jms/EventServicesTopic8001. The EJB container will automatically
              attempt to
              re-establish the connection with the JMS server. This warning may occur during
              WebLogic Cluster start-up if the JMS destination is located on another server.
              When the JMS server connection is re-established, the Message-Driven EJB will
              again receive JMS messages.
              The Error was:
              weblogic.jms.common.JMSException: Connection not found
              at weblogic.jms.dispatcher.InvocableManager.invocableFind(InvocableManager.java:121)
              at weblogic.jms.dispatcher.Request.wrappedFiniteStateMachine(Request.java:509)
              at weblogic.jms.dispatcher.DispatcherImpl.dispatchSync(DispatcherImpl.java:272)
              at weblogic.jms.client.JMSConnection.sessionCreate(JMSConnection.java:268)
              at weblogic.jms.client.JMSConnection.createTopicSession(JMSConnection.java:245)
              at weblogic.ejb20.internal.JMSConnectionPoller.createJMSConnection(JMSConnectionPoller.java:522)
              at weblogic.ejb20.internal.JMSConnectionPoller.connectToJMS(JMSConnectionPoller.java:418)
              at weblogic.ejb20.internal.JMSConnectionPoller.trigger(JMSConnectionPoller.java:348)
              at weblogic.time.common.internal.ScheduledTrigger.executeLocally(ScheduledTrigger.java:238)
              at weblogic.time.common.internal.ScheduledTrigger.execute(ScheduledTrigger.java:229)
              at weblogic.time.server.ScheduledTrigger.execute(ScheduledTrigger.java:6
              9)
              at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              Have you run into a similar problem? Any suggestion?
              Thanks,
              Farook
              

    FAQ. Naming conflict. To interop between domains make sure:
              All WL Servers are named differently.
              All JMS Servers are named differently.
              All JMS Stores are named differently.
              Tom
              Farook Wadia wrote:
              > Hi, I am having problem making an MDB listen to a remote JMS Topic. Here's the
              > scenario:
              >
              >
              >>Two Weblogic servers (6.1 sp3) running on the same machine (W2K) - they are
              >
              > not part of a cluster......both are independent servers
              >
              >
              >>One WLS is listening on port 7001 (Domain=WLSDomain1; Target=Server1) and the
              >
              > second one on 8001 (Domain=WLSDomain2; Target=Server1 {This is not a typo, the
              > target is Server1})
              >
              >
              >>In WLSDomain1/Server1, I have a JMS Topic defined as follows (in its config.xml
              >
              > file):
              >
              > <JMSServer Name="EventServicesJMSServer"
              > Store="ESJMSServerFileStore" Targets="Server1">
              > <JMSTopic JNDIName="jms/EventServicesTopic7001"
              > Name="jms/EventServicesTopic7001" StoreEnabled="true"/>
              > </JMSServer>
              >
              >>In WLSDomain2/Server1, I have a JMS Topic defined as follows (in config.xml
              >
              > file):
              >
              > <JMSServer Name="EventServicesJMSServer"
              > Store="ESJMSServerFileStore" Targets="Server1">
              > <JMSTopic JNDIName="jms/EventServicesTopic8001"
              > Name="jms/EventServicesTopic8001" StoreEnabled="true"/>
              > </JMSServer>
              >
              >>An MDB is deployed on WLSDomain1/Server1 with the following elements in its
              >
              > weblogic-jar.xml file (I haven't included the entire weblogic-jar.xml file, only
              > the relevant info):
              >
              > ..
              > <message-driven-descriptor>
              > <pool>
              > <max-beans-in-free-pool>1</max-beans-in-free-pool>
              > <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
              > </pool>
              > <!-- This MDB is defined to listen to a Topic in another WLS Server running
              > on port 8001 -->
              > <destination-jndi-name>jms/EventServicesTopic8001</destination-jndi-name>
              > <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
              > <provider-url>t3://localhost:8001</provider-url>
              > <connection-factory-jndi-name>weblogic/jms/ConnectionFactory</connection-factory-jndi-name>
              > </message-driven-descriptor>
              > ...
              >
              >
              >>An MDB is deployed on WLSDomain2/Server1 with the following elements in its
              >
              > weblogic-jar.xml file (I haven't included the entire weblogic-jar.xml file, only
              > the relevant info):
              >
              > ..
              > <message-driven-descriptor>
              > <pool>
              > <max-beans-in-free-pool>1</max-beans-in-free-pool>
              > <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
              > </pool>
              > <!-- This MDB is defined to listen to a Topic in another WLS Server running
              > on port 7001 -->
              > <destination-jndi-name>jms/EventServicesTopic7001</destination-jndi-name>
              > <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
              > <provider-url>t3://localhost:7001</provider-url>
              > <connection-factory-jndi-name>weblogic/jms/ConnectionFactory</connection-factory-jndi-name>
              > </message-driven-descriptor>
              > ...
              >
              >
              >>After starting both the WLS servers, I've verified that they have made connections
              >
              > to each other; the Topics are defined in the JNDI tree of the respective servers;
              > and the MDBs have been deployed in their respective servers. But the MDBs can't
              > see/connect to their respective JMS destination. Here's the error message and
              > stack trace from one the WLS server's trace file:
              >
              > <Apr 17, 2003 4:58:25 PM GMT> <Warning> <EJB> <The Message-Driven EJB: com.manu.
              > common.server.objectServices.CSMEventListenerMDB_8001 is unable to connect to
              > the JMS destination: jms/EventServicesTopic8001. The EJB container will automatically
              > attempt to
              > re-establish the connection with the JMS server. This warning may occur during
              > WebLogic Cluster start-up if the JMS destination is located on another server.
              > When the JMS server connection is re-established, the Message-Driven EJB will
              > again receive JMS messages.
              > The Error was:
              > weblogic.jms.common.JMSException: Connection not found
              > at weblogic.jms.dispatcher.InvocableManager.invocableFind(InvocableManager.java:121)
              > at weblogic.jms.dispatcher.Request.wrappedFiniteStateMachine(Request.java:509)
              > at weblogic.jms.dispatcher.DispatcherImpl.dispatchSync(DispatcherImpl.java:272)
              > at weblogic.jms.client.JMSConnection.sessionCreate(JMSConnection.java:268)
              > at weblogic.jms.client.JMSConnection.createTopicSession(JMSConnection.java:245)
              > at weblogic.ejb20.internal.JMSConnectionPoller.createJMSConnection(JMSConnectionPoller.java:522)
              > at weblogic.ejb20.internal.JMSConnectionPoller.connectToJMS(JMSConnectionPoller.java:418)
              > at weblogic.ejb20.internal.JMSConnectionPoller.trigger(JMSConnectionPoller.java:348)
              > at weblogic.time.common.internal.ScheduledTrigger.executeLocally(ScheduledTrigger.java:238)
              > at weblogic.time.common.internal.ScheduledTrigger.execute(ScheduledTrigger.java:229)
              > at weblogic.time.server.ScheduledTrigger.execute(ScheduledTrigger.java:6
              > 9)
              > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              >
              >
              > Have you run into a similar problem? Any suggestion?
              >
              > Thanks,
              >
              > Farook
              

  • Some basic questions of WLS cluster services.

    Hi,
              I always get confused by WLS EJB failover policy.
              Here are some my understandings, please correct me if I'm wrong.
              1. All types (SLSB, SFSB, ROEB, RWEB) cluster-ware Home stub support both
              load balancing and failover.
              2. SLSB replica-aware Remote stub supports load balancing, but failover only
              if failing method is specified IDEMPOTENT (WLS is not smart enough to know
              failure at before, middle, after method execution).
              3. SFSB replica-aware remote stub is pinned in the primary server (no load
              balancing happens here), but will failover to secondary server even without
              knowing if failing method is IDEMPOTENT. How does WLS suddenly get smart
              this time???
              4.ROEB replica-aware remote stub supports load balancing.
              5. RWEB supports neither loading balancing nor failover.
              I've asked these to several people (some of them are claimed as WLS expert),
              none of them could give me the whole picture. I world appreciate if someone
              could enlighten me on this.
              Feng
              

    Feng,
              SLSB do not have failover per se. They are stateless, so the bean doesn't
              have to fail over. The execution may, but the execution unit is typically
              from the HTTP request on back, not the EJB invocation on back, so you don't
              have to worry about that with web clients.
              SFSB have failover with state in 6.1, but I suggest you avoid using SFSB in
              your design as long-term state holders, and thus I suggest avoiding using
              SFSB replication. (AFAIK it works fine, but why use something that may be
              performance-expensive that you don't need?)
              Entity beans have their state managed by the database, so an in flight
              transaction will simply roll back leaving them 'failed over' (loose
              definition) back to their previous state.
              The main concern as an app designer is making sure that your HTTP requests
              are idempotent. The EJB container takes care of itself by using
              transactions, but you need to make sure that your HTTP requests can (a) be
              repeated without harm and thus (b) can failover without concern.
              Peace,
              Cameron Purdy
              Tangosol Inc.
              << Tangosol Server: How Weblogic applications are customized >>
              << Download now from http://www.tangosol.com/download.jsp >>
              "Feng Hou" <[email protected]> wrote in message
              news:[email protected]...
              > Hi,
              >
              > I always get confused by WLS EJB failover policy.
              >
              > Here are some my understandings, please correct me if I'm wrong.
              >
              > 1. All types (SLSB, SFSB, ROEB, RWEB) cluster-ware Home stub support both
              > load balancing and failover.
              >
              > 2. SLSB replica-aware Remote stub supports load balancing, but failover
              only
              > if failing method is specified IDEMPOTENT (WLS is not smart enough to know
              > failure at before, middle, after method execution).
              >
              > 3. SFSB replica-aware remote stub is pinned in the primary server (no load
              > balancing happens here), but will failover to secondary server even
              without
              > knowing if failing method is IDEMPOTENT. How does WLS suddenly get smart
              > this time???
              >
              > 4.ROEB replica-aware remote stub supports load balancing.
              >
              > 5. RWEB supports neither loading balancing nor failover.
              >
              > I've asked these to several people (some of them are claimed as WLS
              expert),
              > none of them could give me the whole picture. I world appreciate if
              someone
              > could enlighten me on this.
              >
              > Feng
              >
              >
              >
              

  • MDB Topic & concurrency

    The JMS faq say
    "For Topics in WebLogic JMS 6.1, there is one JMSSession per bean instance in
    the pool. Because of the way Topics work, the session, and thus every bean instance,
    receives a copy of each message published on that Topic.
    -- snip --
    For each kind of MDB listening on the topic, the message is delivered exactly
    once (i.e., the message will be delivered exactly once to an instance in each
    named MDB pool listening on the topic)."
    The two statements seem to condradict each other. One seems to say that each
    instance in a pool will get a copy of the message and the otehr syas that the
    pool as a whole will get only one copy of the message.
    Am I being dense? Is there a version issue? What's going on?
    -Gordon

    If you have a cluster of N WLS servers and on each server you have a MDB
    deployed which listens to topic T. Then an instance on each of the N
    servers will receive a message from the topic.
    If you send P messages to the topic T, then up to P instances may be
    processing the messages in parallel on a given server. However, under
    the covers they will all actually be using the same JMS Session. The
    EJB container does some "fancy" stuff to get the JMS acks right. This
    is one of those things that makes MDBs very attractive since it's a pain
    to write this code yourself in JMS.
    -- Rob
    Gordon Palumbo wrote:
    I would agree, but given the FAQ and this statement from an old post
    (feb 2001)
    "In the upcoming 6.0 service pack, only one instance per deployment
    will receive
    a copy of a topic message. In 6.0, each deployment listener instance
    receives
    a copy."
    The statement that each instance get's a session (and is thus a
    seperate listener)bothered
    me.
    I got worried about expected behavior or a lingering bug in Weblogic 6.X
    I was looking for someone to confirm the actual behavior in WebLogic 6.1
    -Gordon
    Simon Evans wrote:
    it is saying for each bean, there is a pool of instances. the message
    gets delivered to each bean, but to only one instance from the pool.
    one instance will be picked out of the pool to handle the message.
    it would not make sense for each instance of the bean in a pool to
    receive the message.
    Gordon Palumbo wrote:
    The JMS faq say
    "For Topics in WebLogic JMS 6.1, there is one JMSSession per bean
    instance
    in
    the pool. Because of the way Topics work, the session, and thus everybean instance,
    receives a copy of each message published on that Topic.
    -- snip --
    For each kind of MDB listening on the topic, the message is deliveredexactly
    once (i.e., the message will be delivered exactly once to an instancein each
    named MDB pool listening on the topic)."
    The two statements seem to condradict each other. One seems to saythat each
    instance in a pool will get a copy of the message and the otehr syasthat the
    pool as a whole will get only one copy of the message.
    Am I being dense? Is there a version issue? What's going on?
    -Gordon

Maybe you are looking for

  • How to create a pdf for the URL attached to an invoice and send it as an attachment in a mail

    HI, I have requirement where i need to get the URL attached to an invoice, create the pdf and send as an attachement in a mail. The URL attached to an invoice can be seen by following the path : VF03-> Billing document->system->Services for object ->

  • Error in while applying database patchset

    steps to upgrade EBS database from 9.2.0.6 to 10.2.0.2 while applying this patchset p4547817_10202_LINUX.zip i am getting error like [oradev@sql Disk1]$ ./runInstaller Starting Oracle Universal Installer... Checking installer requirements... Checking

  • Query : Addition of extra fields in the User Registration page of portal.

    Hi All, I have a query, about adding extra fields in the new user registration page of portal. If you can suggest the required source files in details,inorder to incorporate two more fields. Say, AGE and COMPANY,with the existing fields in the same p

  • Literalxml encoding style not working in WLS 7.0 SP1

    I am posting the following handcrafted message via an HTTPS client POST on to the Web Service URL : <env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org

  • BW Query - result by latest month

    Dear Expert, I have a query that contains multiple key figures. One of the key figure, need to display result by the latest month and not sum of all month. I have 2 scenario: 1. YTD 10/2012 will display data of october 2012 only instead of sum of all