<Insert Picture Here> TOI WLS JMS 10.3.4 / PS3 Partitioned Distributed Topics & MDBs aka Parallel HA for Topics Jan 20 2011 Version: 7m Recommended Reading 1 of 2 Trainees: Pre-release 10.3.4 edocs list. Will update JMS wiki docs If needed, Chapter 2, "Understanding WebLogic JMS," provides an overview of the Java Message Service. Many of our customers do not get correct guidance. JMS Config Best Practices JMS Chapter of Perf Guide MDB Chapter of Perf Guide Recommended Reading 2 of 2 Trainees: Pre-release 10.3.4 edocs list. Will update JMS wiki docs Configuring and using new features Partitioned Dist Topics, Unrestricted ClientID, Shared Subs, and Strategies for MDBs Using Distributed Topics WebLogic Messaging High Availability Features Using the JMS Destination Availability Helper API Optional Config Beans JMS Connection Factory , Uniform Dist Topic Runtime Beans Connection , Consumer , Subscription Best Practices that are not always applied! Encourage customers to repair these situations: Uniquely name different WebLogic domains & servers Even if two servers are in two different domains, they must have different names – otherwise JMS and JTA operations can fail. Also applies to JMS Servers and SAF Agents … Always configure Quotas to avoid OutOfMemory Every message header takes server memory, eventually if consumers do not keep up with producers, server will OOM (see JMS Chapter of Perf Guide) Always use advanced targeting for destinations Ensure they end up on the exact intended JMS Server or SAF Agent (see JMS Config Best Practices) If there is a production store emergency, please escalate to get expertise from JMS Sustaining Engineering If a server is unable to boot due to store corruption then the store admin tool will also fail to work. If store corruption exists: Avoid restarting with a new store if possible. It’s very hard to combine recovered data into the new store. To get their production system back online, Immediately: Obtain a copy of the problem store file or DB table dump. Obtain entire WLS config Pass config and store data to Sustaining Engineering for them to attempt data recovery. This is a very time consuming manual operation, but it is currently the only means of data recovery. Field engineers have tried to reverse engineer using the store admin tool and the tooling to merge an old store into the new store does not exist. Sample Internal JMS flows (JNDI and RMI) Client look up JMS ConnectionFactory+ Destination in JNDI. JMSConnection, JMSSession, JMSConsumer, JMSProducer ____.________ ____.________ Connection Factory JMS Connection Factory is a RMI Cluster Aware stub. FEConnection FESession FEProducer FEConsumer FE* objects contain client state. Sample Internal JMS flows (Threads, RMI, Messaging Kernel) JMS Server Blue Queue Blocking call Client or Server JVM Thread: call() Async Messaging Kernel Async AsyncResponse FutureResult non-blocking call FEConnection FESession Introduce Distributed Destinations Sample Internal JMS flows JMS Server BlueMember Client or Server JVM Thread: call() Async FEConnection FESession JMS Server RedMember Async Messaging Kernel Async Select Distributed Destination Member by Load Balancing and Consumer counts Messaging Kernel Async Distributed Topics always Forward before WLS 10.3.4 PS3 JMS Server BlueMember Client or Server JVM Thread: call() Async FEConnection FESession JMS Server RedMember Async Messaging Kernel Async Messages forwarded between all Distributed Topic Members Messaging Kernel Async What’s Coming in JMS in WebLogic Server 11gR1 PS3 Partitioned Distributed Topics Shared Durable Subscriptions • Better matches MDB and application deployment strategies across a cluster Relaxed Client ID Restrictions Destination Availability Helper APIs SOA JMS Adapter Enhancements • Messages are load balanced similar to a distributed queue MDB Enhancements • No forwarding between topic members New JMS PS3 features 1) PartitionedDistributedTopic (PDT) New PDT does not forward messages between topic members Old “Replicated” Distributed Topic (PDT) forward every message ForwardingPolicy on <uniform-distributed-topic> “Replicated” (default, old behavior) “Partitioned” PDT Messages are load balanced similar to a distributed queue PDT matches cluster MDB and application deployment strategies Applications can add “NOT JMS_WL_DDForwarded” to consumer selector for PDT behavior on a RDT PS3 MDBs may automatically add this selector as needed New JMS PS3 features 2) Unrestricted ClientID An extension to JMS Standard Multiple JMS connections can use the same ClientID ClientIDPolicy on JMSConnectionFactoryBean.ClientParamsBean Restricted (default, old behavior) Unrestricted Allow same Name in Restricted and Unrestricted mode They are independent and not equal Restricted ClientID bound into JNDI, unrestricted one does not unsubscribe in Unrestricted mode Need to use an extension API (Member) destination object is required! PS3 MDBs may automatically activate this feature New JMS PS3 features 3) Shared Subscriptions Multiple consumers can process messages in parallel from a single subscription treated as a queue with multiple consumers SubscriptionSharingPolicy on JMSConnectionFactoryBean.ClientParamsBean Exclusive (default) Sharable Applies to both durable and non-durable Client-responsible-for-ack disabled for shared subs Performance impact on non-durable, non-UOO, nontransactional topic subscribers PS3 MDBs may automatically activate this feature New JMS PS3 features 4) JMSDestinationAvailabilityHelper A register/notification mechanism for DD member availability notifications Help to have a full consumption coverage among all active DD members Help to react on cluster topology changes. Help to work around some security issues using Foreign JMS server Used by MDB container and SOA Adapter container New JMS PS3 features 5) Full MDB Support for WebLogic Topics Single “mode” annotation for both RDTs and PDTs Automatically enable two new patterns “one copy per application” “one copy per server” New modes automatically enable new JMS features described on previous slides. Programmer’s guide heavily updated, includes: Sample code Full chapter on working with topics, including topic patterns Single table enumerating all attributes and annotations. Appendix with diagrams for new distributed topic patterns Highly recommended reading New JMS PS3 features Client Interfaces WLConnection setClientIDPolicy()/getClientIDPolicy() setSubscriptionSharingPolicy()/getSubscriptionSharingPolicy() WLSession Unsubscribe(Topic topic, String name) New JMS PS3 features JMSDestinationAvailabilityHelper interfaces JMSDestinationAvailabilityHelper public RegistrationHandle register(Hashtable properties, String destJNDIName,DestinationAvailabilityListener listener); RegistrationHandle void unregister() lookupConnectionFactory(String jndiName) lookupDestination(String jndiName) runAs(PrivilegedExceptionAction action) DestinationAvailabilityListener onDestinationsAvailable(String destJNDIName, List<DestinationDetail>) onDestinationsUnavailable(String destJNDIName, List<DestinationDetail>) onFailure(String destJNDIName, Exception exception) New JMS PS3 features JMSDestinationAvailabilityHelper interfaces DestinationDetail Type (RDT, PDT, DQ, standalone topic, 3rd party topic) JNDIName (member’s) Destination WLSServerName JMSServerName MigratableTargetName CreateDestinationArgument StoreName isAdvancedTopicSupported isLocalWLSServer isLocalCluster New JMS PS3 features Product code location and classes (10.3.4) ${SRC}/wls/weblogic/jms/extensions/ JMSDestinationAvailabilityHelper DestinationAvailabilityListener DestinationDetail DestinationDetailImpl RegistrationHandle ${SRC}/wls/weblogic/jms/common/ CDS* (10.3.*) CDSSecurityHandle (new in 10.3.4) JMS PS3 features Product code location and classes (10.3.*) ${SRC}/wls/weblogic/jms/backend/udd/ SyntheticDTBean SyntheticDestinationBean UDDEntity ${SRC}/wls/weblogic/jms/dd/ DDHandler ${SRC}/wls/weblogic/jms/common/ JMSLoadBalancer JMSSQLExpression JMSSQLFilter JMSVariableBinder JMS PS3 features Product code location and classes (10.3.*) ${SRC}/wls/weblogic/jms/backend/ BETopicImpl BEConsumerImpl BESessionImpl ${SRC}/wls/weblogic/jms/frontend/ FEConsumer FEConnection FESession ${SRC}/wls/weblogic/jms/client/ WLConnection and JMSConnection WLSession and JMSSession Additional MDB JMS PS3 features Product code location and classes (10.3.4) ${SRC}/wls/weblogic/ejb/container/ deployer/MessageDrivenBeanInfoImpl internal/JMSConnectionPoller manager/MessageDrivenManager New Topic Architecture Local Case Start with a cluster and a Partitioned Uniform Distributed Topic (UDT) 3 • Basis for Event-Driven Messaging 2 1 • Parallelism for performance and scalability • Simplified configuration Publish DT Member 1 DT Member 2 DT Member 3 Publish to the UDT. Messages are loadbalanced Distributed Topic Subscription Subscription Subscription MDB MDB MDB Server 1 Server 2 Server 3 NO message MDBs are deployed to forwarding! the cluster. Each MDB creates a subscription on the UDT. Messages are processed in parallel; no duplicate processing. Cluster Expand Capacity • Architectural flexibility Whole Cluster • Neither the publisher nor subscriber needs to know the architecture of the DT or cluster • MDB container automatically adapts to topology changes Messages The UDT automatically container creates arewith loadAdd MDB a server a JMS expands creates subscription balanced toMDB Server on the pool UDT 4 server toan the cluster DT Member 4 DT Member 1 DT Member 2 DT Member 3 Distributed Topic Distributed Topic Subscription Subscription Subscription Subscription MDB MDB MDB MDB 1 2 5 Server 4 Cluster 3 6 Server 1 4 7 Server 2 8 Server 3 Expand Capacity Add Subscribers Deploy another MDB The MDB creates itsato Each sub/MDB gets the cluster own UDT copy of thesubscription message DT Member 4 • Event Driven SOA/Looser Coupling – Add subscribers without any dependency on publishers • Parallelism for scalability and performance DT Member 1 DT Member 2 DT Member 3 Subscription Subscription Distributed Topic Subscription Subscription Subscription 2 MDB 1 Subscription 2 MDB 2 MDB 5 MDB 2 MDB 2 Cluster MDB MDB 2 6 Server 1 4 7 2 5 Subscription 2 3 6 1 Server 4 Subscription 2 8 MDB 2 3 7 Server 2 4 8 Server 3 New Topic Architecture Remote Case • Parallelism for3performance and scalability 2 • Architectural flexibility 1 • Adaptability, no dependency on architecture Publish • Simplified configuration Same starting point: a cluster and a Uniform Distributed Topic (UDT) DT Member 1 DT Member 2 DT Member 3 Subscription Subscription Subscription Publish to the UDT. Messages are loadbalanced Distributed Topic Deploy an MDB to a NO message remote server/cluster forwarding! with a sub on the UDT Cluster 1 Subscription The MDB container creates a sub on each member of the UDT MDB MDB gets messages from all UDT members Server 1 Cluster 2 New Topic Architecture • Parallelism for performance and scalability Remote Cluster Case • Architectural flexibility • Adaptability, no dependency on architecture Publish • Simplified configuration Same starting point: a cluster and a Uniform Distributed Topic (UDT) DT Member 1 Publish to the UDT. 1 Messages are loadbalanced Shared Sub 4 7 DT Member 2 2 5 8 Shared Sub DT Member 3 3 6 9 Shared Sub Distributed Topic MDBs subscribe to the UDT MDB Container requests shared subscriptions Message processing is load balanced between all MDB pools Cluster 1 MDB 1 5 MDB 2 9 Server 1 Cluster 2 4 MDB 3 6 Server 2 7 8 Server 3 Unit of Order • Many MDB threads, multiple transactions, multiple servers, without contention on Unit of Order ID resources on Shared Subscription • When UOO ID is Database Key, no contention Publish All of the subscriptions from a MDB on a PDT act as a Dist Queue DT Member 2 A Shared Subscription is like a single queue with many consumers Shared Sub Messages in the same Unit of Order go to one Session or Transaction MDB consumers access resources without conflicting UOO Id Caveat: Same selector MDB X&Y on same PDT will get same msgs MDB 1 5 MDB 2 9 Location 1 4 MDB 3 6 X Location 2 7 8 Location 3 New Topic Architecture • Parallelism for performance and scalability Remote Cluster Expansion • Architectural flexibility • Adaptability, no dependency on architecture Messaging host cluster expands, subscribers react DT Member 4 4 9 Shared Sub Publish • Simplified configuration DT Member 1 1 7 DT Member 2 2 Shared Sub 5 8 DT Member 3 3 6 Shared Sub Shared Sub MDB MDB Distributed Topic Cluster 1 MDB 1 5 2 9 Server 1 Cluster 2 4 3 6 Server 2 7 8 Server 3 New Topic Architecture • Parallelism for performance and scalability Remote Cluster Expansion 2 • Architectural flexibility • Adaptability, no dependency on architecture Messaging subscriber cluster expands, container manages shared subs DT Member 4 4 9 Shared Sub Publish • Simplified configuration DT Member 1 1 7 DT Member 2 2 Shared Sub 5 8 DT Member 3 3 6 Shared Sub Shared Sub MDB MDB Distributed Topic Cluster 1 MDB 5 MDB 1 8 Server 4 Cluster 2 2 9 Server 1 4 3 6 Server 2 7 Server 3 New Topic Architecture • Event-Driven SOA/Looser Coupling – Add Add Competing Subscribers subscribers without any dependency on publishers Each sub/MDB gets a copy of the message DT Member 1 DT Member 4 4 • Parallelism for Publish scalability and performance 1 9 DT Member 2 7 2 Shared Sub Shared Sub 5 DT Member 3 8 3 Shared Sub 6 Shared Sub Distributed Topic Cluster 1 MDB MDB 2 Server 4 Cluster 2 MDB 1 5 8 5 MDB 2 4 9 MDB 2 8 MDB 2 1 Server 1 9 2 Server 2 MDB MDB 2 4 3 6 6 3 Server 3 7 7 What’s Coming in JMS in WebLogic Server 11gR1 PS3 Partitioned Distributed Topics Shared Durable Subscriptions • Better matches MDB and application deployment strategies across a cluster Relaxed Client ID Restrictions Destination Availability Helper APIs SOA JMS Adapter Enhancements • Messages are load balanced similar to a distributed queue MDB Enhancements • No forwarding between topic members Benefits Support for new patterns and trends Event-Driven SOA Looser coupling Increased flexibility Fire and forget Add new subscribers more easily Ease of use Simplified MDB configuration, common cluster model Improved overall system performance through better support for parallelization Parallel processing across a cluster Multi-threaded processing for transactional subscriptions – up to 16X Combination of Features Enables MDB Ease Of Use Parallelism - Avoid duplicated processing Simplified model - Subscribe to Distributed Topic instead of DT member Dynamically adjust to DT membership Local MDB deployment: create MDB pools only where DT members are hosted Remote MDB deployment: automatically create/destroy subscriptions as DT members come and go MDB Activation Properties control/fine tune behavior topicMessageDistributionMode – One copy per application, one copy per server, or compatibility distributedDestinationConnection – Local only or every member (fine tuning use only) You can still get the old behavior with partitioned distributed topics by tuning these parameters Two necessary switches: DT Forwarding Policy and MDB topicMessageDistributionMode activation property MDB Activation Example //import statements @MessageDriven( name = "MyMDBAppName", mappedName = "MyDistTopic", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), @ActivationConfigProperty(propertyName = "topicMessagesDistributionMode“, propertyValue = "One-Copy-Per-Application") // propertyValue = "One-Copy-Per-Server ") // optional tuning // @ActivationConfigProperty(propertyName = "distributedDestinationConnection", // propertyValue = "EveryMember") }) public class MyMDB implements MessageListener { … Best MDB Practices Local RDTs with Durable MDBs One-copy-per-application/One-copy-per-server with LocalOnly Ensure each WebLogic Server in the cluster hosts exactly one member of the RDT. Do not use WebLogic JMS service-migration (unsupported) but can use "whole server migration” Not an issue with PDTs Compatibility Mode The same as above Always set generate-unique-client-id to true Best MDB Practices (continued) Caution when Changing Durable MDB Attributes May cause messages on current durable subscriptions to be deleted existing durable subscriptions to be abandoned/deleted/replaced Settings topicMessagesDistributionMode topic type distributedDestinationConnection generate-unique-client-id subscription durability ejb-name client-id selector Best Practices When Consuming from WLS JMS DDs Use MDB and SOA Adapter if possible Automatically create and close internal consumers across all members of a DD as needed. They also handle Security Threading Pooling Application life cycle Automatic reconnect Transaction enlistment When MDB or SOA Adapter are not available Still cannot create durable subscribers on a DT A consumer is still pinned to a member Need to create consumers for all members when application boots and when new members come online Consider simple work around periodically restarting consumers to rebalance consumers across a distributed queue. if messaging ordering and performance are not a concern, enabling the distributed queue forwarding option. Use JMSDestinationAvailabilityHelper (advanced users) PS3 MDBs draining PS2 Destinations and vice versa New MDB features require PS3 JMS destinations PS2 and earlier releases are supported, but without the new features. A PS2 MDB draining a PS3 DD Doesn’t use PS3 features. It can not use Unrestricted ClientID or Shared Subscriptions. Old behavior A PS3 MDB draining a PS2 DD Doesn’t use PS3 features. It can not use Unrestricted ClientID or Shared Subscriptions. Set “topic message distribution mode” to Compatibility (the default). Uniform Distributed Topic Durable Subscription Management Importance: We have uniform distributed topic durable subscription management in the console for the first time. This will help out users to manage subscriptions. We have added console pages to view and filter existing durable subscription on uniform distributed Topic. Also added required configurations for creating partitioned distributed topic. It is mainly designed for filtering your subscription on specific distributed destination topic and view statistics on specific subscription. Filtering capability will help user easily focus on required subset of their subscriptions. Currently it does not allow user to create new durable subscription on any member of uniform distributed topic. Partitioned Topic configuration parameters page UDT Subscription Page Overview Subscriptions details section of the page Subscriptions : Advanced filtering Details of subscription Helpful debugging options JMS Debugging -Dweblogic.Debug.DebugJMSBackEnd=true -Dweblogic.Debug.DebugJMSFrontEnd=true -Dweblogic.Debug.DebugJMSDispatcher=true -Dweblogic.Debug.DebugJMSBoot=true -Dweblogic.debug.DebugJMSCDS=true -Dweblogic.debug.DebugJMSSAF=true -Dweblogic.debug.DebugJMSDistTopic=true -Dweblogic.debug.DebugJMSDurSub=true Messaging kernel debugging -Dweblogic.debug.DebugMessagingKernel=true Helpful debugging options (continued) JTA debugging -Dweblogic.debug.DebugJTALLR=true -Dweblogic.debug.DebugJTAJDBC=true -Dweblogic.debug.DebugJTAXA=true -Dweblogic.debug.DebugJTANonXA=true -Dweblogic.debug.DebugJTATLOG=true -Dweblogic.debug.DebugJTAJDBC=true -Dweblogic.debug.DebugJTARecovery=true -Dweblogic.debug.DebugJTA2PC=true Helpful debugging options (continued) Store debugging -Dweblogic.debug.DebugStoreAdmin=true -Dweblogic.debug.DebugStoreXA=true -Dweblogic.debug.DebugStoreXAVerbose=true -Dweblogic.debug.DebugStoreIOPhysical=true core/T3 debugging -Dweblogic.kernel.debug=true -Dweblogic.debug.DebugConnection=true -Dweblogic.debug.DebugMessaging=true Helpful debugging options (continued) EJB/MDB debugging -Dweblogic.debug.DebugEjbDeployment=true -Dweblogic.debug.DebugEjbMdbConnection=true -Dweblogic.debug.DebugEjbSecurity=true JNDI debugging -Dweblogic.debug.DebugJNDI=true -Dweblogic.debug.DebugJNDIFactories=true -Dweblogic.debug.DebugJNDIResolution=true