Enterprise Edition Scalability. ecommerce Framework Built to Scale Reading Time: 10 minutes



Similar documents
NetIQ Access Manager 4.1

Liferay Portal Performance. Benchmark Study of Liferay Portal Enterprise Edition

Apache and Tomcat Clustering Configuration Table of Contents

Serving 4 million page requests an hour with Magento Enterprise

Tableau Server 7.0 scalability

EXECUTIVE SUMMARY CONTENTS. 1. Summary 2. Objectives 3. Methodology and Approach 4. Results 5. Next Steps 6. Glossary 7. Appendix. 1.

Are You Ready for the Holiday Rush?

Table of Contents. Overview... 1 Introduction... 2 Common Architectures Technical Challenges with Magento ChinaNetCloud's Experience...

Performance Optimization For Operational Risk Management Application On Azure Platform

Wednesday, October 10, 12. Running a High Performance LAMP stack on a $20 Virtual Server

Performance White Paper

An Oracle White Paper July Oracle Primavera Contract Management, Business Intelligence Publisher Edition-Sizing Guide

XTM Web 2.0 Enterprise Architecture Hardware Implementation Guidelines. A.Zydroń 18 April Page 1 of 12

Benchmark Performance Test Results for Magento Enterprise Edition

BigMemory & Hybris : Working together to improve the e-commerce customer experience

MID-TIER DEPLOYMENT KB

MEASURING WORKLOAD PERFORMANCE IS THE INFRASTRUCTURE A PROBLEM?

Scaling Progress OpenEdge Appservers. Syed Irfan Pasha Principal QA Engineer Progress Software

Business white paper. HP Process Automation. Version 7.0. Server performance

JBoss Seam Performance and Scalability on Dell PowerEdge 1855 Blade Servers

SOLUTION BRIEF: SLCM R12.7 PERFORMANCE TEST RESULTS JANUARY, Load Test Results for Submit and Approval Phases of Request Life Cycle

Cognos8 Deployment Best Practices for Performance/Scalability. Barnaby Cole Practice Lead, Technical Services

Preparing Your IT for the Holidays. A quick start guide to take your e-commerce to the Cloud

Tuning Tableau Server for High Performance


MAGENTO HOSTING Progressive Server Performance Improvements

A Scalability Study for WebSphere Application Server and DB2 Universal Database

Contents Introduction... 5 Deployment Considerations... 9 Deployment Architectures... 11

Case Study - I. Industry: Social Networking Website Technology : J2EE AJAX, Spring, MySQL, Weblogic, Windows Server 2008.

Oracle Commerce. Managing Online Trading Peaks with Oracle Commerce WHITE PAPER

OVERVIEW Methodology Objectives Terminology Recommended Test Protocol... 3 CLOUD SERVICES VS. DEDICATED HOSTING...

Managing the Performance of Cloud-Based Applications

Liferay Portal s Document Library: Architectural Overview, Performance and Scalability

Performance Testing. Why is important? An introduction. Why is important? Delivering Excellence in Software Engineering

PARALLELS CLOUD SERVER

Cloud Based Application Architectures using Smart Computing

Liferay Performance Tuning

WITH BIGMEMORY WEBMETHODS. Introduction

CHAPTER 1 - JAVA EE OVERVIEW FOR ADMINISTRATORS

JVM Performance Study Comparing Oracle HotSpot and Azul Zing Using Apache Cassandra

Cognos Performance Troubleshooting

Applications Manager Best Practices document

Oracle WebLogic Server 11g Administration

Building a Scalable News Feed Web Service in Clojure

Top 10 reasons your ecommerce site will fail during peak periods

Solutions for detect, diagnose and resolve performance problems in J2EE applications

SOLUTION BRIEF: SLCM R12.8 PERFORMANCE TEST RESULTS JANUARY, Submit and Approval Phase Results

Managing your Red Hat Enterprise Linux guests with RHN Satellite

Tomcat Tuning. Mark Thomas April 2009

How To Test A Web Server

never 20X spike ClustrixDB 2nd Choxi (Formally nomorerack.com) Customer Success Story Reliability and Availability with fast growth in the cloud

Tableau Server Scalability Explained

Virtuoso and Database Scalability

An Oracle Benchmarking Study February Oracle Insurance Insbridge Enterprise Rating: Performance Assessment

IBM Connections 4.0 Social Software for Business Performance Tuning Guide

Performance Testing Process

BENCHMARKING CLOUD DATABASES CASE STUDY on HBASE, HADOOP and CASSANDRA USING YCSB

A Middleware Strategy to Survive Compute Peak Loads in Cloud

Deployment Checklist. Liferay Portal 6.1 Enterprise Edition

Benchmarking Couchbase Server for Interactive Applications. By Alexey Diomin and Kirill Grigorchuk

Outdated Architectures Are Holding Back the Cloud

Performance and Scalability Overview

Test Run Analysis Interpretation (AI) Made Easy with OpenLoad

The deployment of OHMS TM. in private cloud

How To Improve Performance On An Asa 9.4 Web Application Server (For Advanced Users)

How To Configure Apa Web Server For High Performance

bla bla OPEN-XCHANGE Open-Xchange Hardware Needs

Web Application Deployment in the Cloud Using Amazon Web Services From Infancy to Maturity

A Comparative Study on Vega-HTTP & Popular Open-source Web-servers

Capacity Planning Guide for Adobe LiveCycle Data Services 2.6

Rapid Bottleneck Identification A Better Way to do Load Testing. An Oracle White Paper June 2009

Kentico CMS 6.0 Performance Test Report. Kentico CMS 6.0. Performance Test Report February 2012 ANOTHER SUBTITLE

AppDynamics Lite Performance Benchmark. For KonaKart E-commerce Server (Tomcat/JSP/Struts)

Load Testing with JMeter

Load Testing and Monitoring Web Applications in a Windows Environment

Exploring Oracle E-Business Suite Load Balancing Options. Venkat Perumal IT Convergence

An Oracle White Paper March Load Testing Best Practices for Oracle E- Business Suite using Oracle Application Testing Suite

Application Performance Testing Basics

Performance Testing of Java Enterprise Systems

Monitoring Best Practices for COMMERCE

WHITE PAPER. Domo Advanced Architecture

Jitterbit Technical Overview : Microsoft Dynamics CRM

An Oracle White Paper February Rapid Bottleneck Identification - A Better Way to do Load Testing

Magento & Zend Benchmarks Version 1.2, 1.3 (with & without Flat Catalogs)

VirtualCenter Database Performance for Microsoft SQL Server 2005 VirtualCenter 2.5

Transforming ecommerce Big Data into Big Fast Data

Application Performance Management for Enterprise Applications

Web Services Performance: Comparing Java 2 TM Enterprise Edition (J2EE TM platform) and the Microsoft.NET Framework

Removing Failure Points and Increasing Scalability for the Engine that Drives webmd.com

3 Techniques for Database Scalability with Hibernate. Geert Bevin - SpringOne 2009

IT Best Practices Audit TCS offers a wide range of IT Best Practices Audit content covering 15 subjects and over 2200 topics, including:

( ) ( ) TECHNOLOGY BRIEF. XTNDConnect Server: Scalability SCALABILITY REFERS TO HOW WELL THE SYSTEM ADAPTS TO INCREASED DEMANDS AND A GREATER

Implementation & Capacity Planning Specification

Performance Analysis of Web based Applications on Single and Multi Core Servers

StreamServe Persuasion SP5 StreamStudio

How To Store Data On An Ocora Nosql Database On A Flash Memory Device On A Microsoft Flash Memory 2 (Iomemory)

ioscale: The Holy Grail for Hyperscale

Fixed Price Website Load Testing

JAMF Software Server Installation and Configuration Guide for OS X. Version 9.2

This document will list the ManageEngine Applications Manager best practices

Transcription:

Enterprise Edition Scalability ecommerce Framework Built to Scale Reading Time: 10 minutes

Broadleaf Commerce Scalability About the Broadleaf Commerce Framework Test Methodology Test Results Test 1: High Transaction Volume Test 2: Concurrent Users Test 3: Large Catalogs Test 4: High Conversion Rates Performance Considerations and Recommendations Caching Session Affinity Database Search CDN Third Party Integrations Custom Code Conclusion Appendix A Detailed Test Plan Appendix B Hardware Configuration Appendix C Database Tuning Appendix D Other Configuration Considerations Appendix E Sample Tomcat JDBC Configuration Appendix F Sample Ehcache Configuration 3 4 5 5 6 7 8 9 9 10 10 11 11 12 12 13 14 16 17 18 21 23 2

About the Broadleaf Commerce Framework An enterprise commerce framework based on best of breed open source technologies Broadleaf Commerce (Broadleaf) provides companies with a platform for building high performance commerce solutions. Based on best of breed open source technologies including the Spring framework, Broadleaf was designed from the ground up to be extensible and scalable for businesses and institutions requiring a mission critical ecommerce solution. Broadleaf is an open source framework that can be used by any developer needing a commerce solution. Broadleaf s Community Edition includes basic commerce features and administrative tools in a modern development framework suitable for small business needs. Broadleaf Enterprise Edition adds features needed by enterprise customers along with performance and scalability improvements. This paper provides details of scalability tests performed with the Broadleaf Commerce Enterprise Edition. Testing was completed on average equipment (2 core servers with 4 GB RAM) using real world test methodologies. With the ability to easily scale to hundreds of transactions per second across tens of thousands of concurrent users and millions of products, the test results speak for themselves. We would like to thank our friends at Rackspace (www.rackspace.com) for their contribution of cloud hardware and services for this load test study. Please see Appendix C for details on the Rackspace configuration used to achieve these results. 3

Test Methodology Simulating real-world shopping scenarios with industry average conversion rates Simulating real-world scenarios when testing an e-commerce application is critical in determining not only how efficiently the software performs under normal circumstances, but also how many users it can serve during peak demand. Though difficult to conduct, the test yields the best real world results. While testing up to a 100% conversion rate to ensure performance on Black Friday and Cyber Monday behavior, most test cases conducted an average of an 11% add-to-cart action and an aggregated 3% conversion rate. Furthermore, a 300ms pause time was simulated for each checkout transaction, indicative of payment processing times. In all cases, Broadleaf set out to report objective scalability numbers. In isolation, test cases for home page views or orders have no merit outside of simulated consumer behavior. The ability for a system to handle hundreds of millions of views to a single page without any other variable is a useless statistic in itself. Furthermore, test cases with varying concurrent user numbers hold no value unless tested against concurrent user behavior, not just hits to a website. Testing could only be considered a pass if the Broadleaf framework responded with an average response time less than one second. Broadleaf detailed test result details (Appendix H) show specific measures of transactions per second (txns/sec) and actual response times against comprehensive page-level test details, server specifications and product catalog sizes. 4

Test Results Against high traffic, large product catalogs and peak season spikes, Broadleaf Commerce proves the ability to handle the most stringent scalability situations Peak demand is defined based on industry, customer base and seasonality. Through all major peak ecommerce variables, Broadleaf proves the ability to scale. Across high transaction volume, concurrent users, large catalogs and high conversion rates, Broadleaf exhibits consistent peak performance. Test 1: High Transaction Volume For test purposes, transactions have been defined as web interactions such as view product page or add to cart, with a total of 24 pre-defined web interactions defined in Appendix A. Simulating linear scale as servers are added, Broadleaf easily handles roughly 30 transactions per second on a single server and 200 transactions per second in an eight server deployment of the system. Broadleaf demonstrated horizontal scalability, handling 200 transactions per second 5

Test 2: Concurrent Users In order to simulate transactions per second in a real world scenario, Broadleaf tested tens of thousands of concurrent users across architectural tiers from one to eight server scenarios. While many scalability studies determine concurrent users independent of transactions, Broadleaf s tests used concurrent user counts in order to prove transactions per second (Test 1), demonstrating realistic online traffic scenarios. Broadleaf demonstrated the ability to handle tens of thousands of concurrent users For companies needing more simultaneous threads (e.g., companies that want to be the next Amazon, Facebook, or Twitter), infrastructure build out and serious application performance tuning can be handled with Broadleaf s Professional Services. For most businesses with typical conversion rates, the numbers demonstrated above can handle sites generating billions of dollars in sales. 6

Test 3: Large Catalogs For corporations requiring larger catalog sets, Broadleaf tested an online catalog with 1,000,000 products. While Test 1 and 2 covered a catalog of 10,000 products in achieving linear scalability, Broadleaf further proved linear scalability using a catalog of 1,000,000 products, using the same commodity hardware and test cases across the product catalog sizes. Broadleaf demonstrated linear performance across catalogs of 10,000 and 1,000,000 products While larger catalog sizes predictably have an impact on Broadleaf s ability to handle transactions per second, hardware scaling proved to be linear. Broadleaf did not top out or otherwise plateau at any combination of catalog size, concurrent user or transaction throughput test. For enterprise clients looking for immediate scale or plenty of room to grow, Broadleaf demonstrates proven proficiency. 7

Test 4: High Conversion Rates For corporations with increased conversion rates above industry averages, Broadleaf tested up to 100% conversion in proving, once again, linear scale. While Tests 1 through 3 assumed an industry average conversion rate of 3%, the system was pushed up to a 100% conversion rate. With a unit of measure being orders per hour rather than web transactions per second, a single server instance easily handles 8,750 orders per hour assuming a 50% conversion rate on site traffic, simulating conversion rates retailers see during an event such as Black Friday. In exploring the total number of orders able to be processed in an acceptable threshold (under a second), Broadleaf s two server configuration handles approximately 43,000 orders per hour, with eight servers processing approximately 116,000 orders per hour. Broadleaf demonstrated linear performance across high conversion rates, easily handling order spikes 8

Performance Considerations and Recommendations Best practice infrastructure and general configuration guidance should be followed Caching Caching is an important aspect of tuning a Broadleaf Commerce implementation for performance. Turning on the Thymeleaf cache and tuning the Hibernate Level 2 cache configuration should be considered, as both are beneficial to increasing the efficiency of the application. The default configuration of Broadleaf Commerce includes catalog cache configuration with long time-to-live values and large cache sizes, which should be enabled for optimum performance (explained in Appendix D). Ehcache is the recommended Hibernate level 2 cache for Broadleaf. It is readily supported by Hibernate, backed by Terracotta, and can be expanded in a number of interesting way to help with individual cases. Ehcache can be turned into a distributed cache, as well as expanded to use Big Memory. Big Memory is a Terracotta product utilizing off-heap memory space to store cache records, which can help with garbage collection costs normally associated with large in-memory caches. With large product catalog or inventory caches, Big Memory should be an architectural consideration. Finally, it is recommended to configure specific applications with a single, standalone Hibernate level 2 cache per node, rather than distributed cache. Distributed caches tend to be overly chatty over the network and are generally slower. For the same result, a JMS queue approach that is notified of any cache eviction event is recommended. Every node listens to the queue and can handle its individual cache grooming, assuming the requirement is only near real-time updates of cache (correct in most cases). 9

Session Affinity The recommended configuration for Broadleaf Commerce is to enable session affinity so that once a conversation has started with a user, the user will be sent back to the same node for each subsequent request while the session is still active. Centralized session solutions that attempt to store all user state in one location, while flexible, are slower because user state must be constantly pushed to the central location. In addition, the effectiveness of the Hibernate level 2 cache for Customer and Order is negated when the user does not return to the same server during the session. Database Broadleaf Commerce can be used with a variety of database platforms. The scalability tests described in this paper were executed using a MySQL database. Broadleaf supports open source databases including MySQL and Postgres. Supported commercial databases include Oracle and Microsoft SQLServer. Tuning any database to be able to handle expected demand is an important step in readying a Broadleaf Commerce implementation for production. Configuring max connections and table buffers are required, in addition to other vendor specific tweaks. Appendix D contains specific tuning notes for MySQL that were used in this test. Consult specific vendor documentation for more information on database tuning and configuration. 10

Search Broadleaf Commerce uses Solr as its search engine. By default, Solr is configured to run as an embedded server. This serves well for smaller catalogs, since the memory and cpu requirements are small. And with the embedded server, there is no HTTP connection overhead, so overall it runs quite fast. At larger product catalog sizes (30,000+), we recommend configuring your Broadleaf Commerce implementation to refer to an external, standalone Solr instance (or cluster). Otherwise, the memory and CPU requirements are disruptive to the overall application performance. CDN The load test did not retrieve graphics or other static assets from the application container, nor did it engage the built-in asset server for any managed asset retrieval. Most high volume sites will benefit from having static assets, including images, JavaScript, and other media, be delivered to users via a CDN (Content Delivery Network). CDN solutions offer hi-speed nodes located across the world with delivery of your assets coming from the nodes closest to a given user. This serves to reduce response times for your application and lessens unecessary load on your application container. Rackspace offers an easy-to-use CDN for such purposes. 11

Third Party Integrations The load test accounted for a simple, third party integration during the submit order process by including an arbitrary 300ms wait time to represent a call to a payment processor. Typical enterprise ecommerce systems can contain ten or more integrations. Each integration has the potential to negatively affect the scalability of the system. It is important to use best practices for integrating with other systems to ensure that one poorly performing third party integration does not bring down the entire system. Custom Code The Broadleaf Framework is highly extensible. The customizations made for each implementation will require additional resources (e.g., CPU and Database). The specific implementation may use the system in a way that differs from the scalability tests as we designed them. It is recommended that all medium to large businesses utilizing Broadleaf Commerce execute their own scalability and performance tests. 12

Conclusion The Broadleaf Commerce framework scales linear across all testing metrics to meet the needs of even the most demanding ecommerce sites Well known retailers and businesses depend on Broadleaf Commerce to power their ecommerce solutions, as Broadleaf provides best-in-class ecommerce capabilities at the highest value. Broadleaf proved real business use cases across multiple scenarios, demonstrating: Hundreds of transactions per second Tens of thousands of concurrent users Millions of products Billions of dollars worth of sales Furthermore, the provided test results demonstrate that Broadleaf Commerce scales horizontally by adding additional servers. This type of scaling is ideal for cloud based and virtualized environments. The tests showed scalable results for systems utilizing between one and eight application servers that had catalog sizes ranging from 10,000 items to 1,000,000 items. Broadleaf s Enterprise Edition meets the scalability needs of the large majority of companies utilizing commodity hardware, providing by far the best overall value among enterprise ecommerce solutions. For more information on Broadleaf, please visit: www.broadleafcommerce.com For more information on Rackspace, please visit: www.rackspace.com 13

Appendix A Detailed Test Plan The data below provides a detailed list of the flows that constituted the test plan URLs and Percentage Weighting 1 for Standard Ecommerce Test 1. Home Page 100% 2. Category Page Browse 98% 3. Search Page 60% 4. Product Page Browser 98% 5. Product Page Add To Cart 11% 6. Add To Cart Page Without Product Options N/A 7. Add To Cart Page With Product Options N/A 8. View Cart Page 5.4% 9. Start Checkout Page 5.4% 10. Anonymous Checkout page - 3% 11. Registered Customer Login Page 2.4% 12. Registered Customer Login Submission Page 2.4% 13. Shipping Option Page 4.7% 14. Address Information Entry Page 4.7% 15. Pay Using Credit Card and Complete Checkout Page 3% URLs for Order Test 16. Product Page Add To Cart 17. Add To Cart Page Without Product Options 18. Add To Cart Page With Product Options 19. View Cart Page 20. Start Checkout Page a. Anonymous Checkout page b. Registered Customer Login Page 21. Registered Customer Login Submission Page 22. Shipping Option Page 23. Address Information Entry Page 24. Pay Using Credit Card and Complete Checkout Page 14

All tests were run on the Broadleaf Commerce Heat Clinic demonstration application using Broadleaf Commerce Enterprise Edition version 2.2.1. See Appendix B for hardware configurations. Notes 1. The system added an artificial payment processor latency of 300 ms during the submit order step 2. The test environment was put through a brief warm-up period before starting to capture metrics. Each test was run until throughput stabilization was achieved. 3. Throughput is represented as samples per second. Order throughput is measured as orders per hour. 4. JMeter was used to generate virtual user load in Master/Slave configuration to maximize virtual user efficiency. 5. Catalog data at 10,000 and 100,000 and 1,000,000 sizes was generated artificially using data generation software. 6. SSL termination was utilized at the load balancer. This configuration would normally be inappropriate for a cloud installation of Broadleaf Commerce because of security concerns, but is suitable for our wider goal of load testing. 7. A load test is considered successful when aggregate response times for all pages register near or under 1 second for 90% of requests. 15

Appendix B Hardware Configuration Broadleaf s Rackspace deployment used Ubuntu 12.0.4 LTS as the operating system with the minimum configuration tested being 4GB Ram with 2 cores Web Servers Apache 2.0 (4 GB RAM, 2 Cores) JMeter Master Client Application Servers JMeter Slave Clients Tomcat 7.0 (4 GB RAM, 2 Cores) Search Server Cloud LoadBalancer Solr 4.0 (4 GB RAM, 2 Cores) Apache2 Web Server Apache2 Web Server Database Server Tomcat7 App Containers MySQL 5.5 (30 GB RAM, 8 Cores) Client Test Machines JMeter 2.8 Master (2GB RAM, 2 Cores) JMeter 2.8 Slave (2GB RAM, 2 Cores) Solr Search Server MySql Notes 1. Configured in the Rackspace Cloud Control Panel 2. SSL terminated at the load balancer 3. Rackspace offers a more scalable version of MySQL in the form of their Cloud Database product, though due to testing specifics, Broadleaf used a single MySQL installation of a standard cloud server 16

Appendix C Database Tuning Specific MySQL tuning changes were made for Broadleaf s load test When using MySQL, Broadleaf Commerce depends on the use of the InnoDB table type. There are several configurations for MySQL and InnoDB that can be made to optimize performance at the database layer. MySQL configuration changes are enacted by editing MySQL s my.cnf file. Variable Value Notes thread_cache_size Should be equal to or greater than the max_used_connections status variable Amount of threads MySql keeps in cache to serve connections max_connections Should be high enough to handle peak load Maximum number of connections MySql will allow thread_concurrency Should be between 2 to 4 times the number of cores Test benchmark to determine the best value table_cache 1024 Number of tables MySql will cache innodb_buffer_pool_size 80% of available RAM Data and index cache innodb_thread_concurrency At least 8, even on 1 core. Calculate as (2 * core count) + 2. Regulate the count of threads working inside InnoDB innodb_flush_method O_DIRECT Prevents double buffering of MySql cache by the OS innodb_log_buffer_size 4M Reduce log flush frequency innodb_file_per_table This is an option and has no value Prevent single tablespace bloat query_cache_size 64M Cache common queries query_cache_limit 2M Limit the size of a query MySql will cache 17

Appendix D Other Configuration Considerations Specific configuration settings were used for Apache, Tomcat, and Broadleaf Apache Web Server Apache is very efficient at serving content and routing connections to your app container. However, it should still be configured to handle your target connection count. Test benchmarking will provide an indication of how many total connections and how many separate Apache web server installations you will need. On a standard Apache2 installation on Ubuntu 12.0.4 LTS, Apache is installed in worker mpm mode. The snippet below in apache2.conf changes the max number of clients Apache will handle to 800. <IfModule mpm_worker_module> StartServers 16 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 ServerLimit 32 MaxClients 800 MaxRequestsPerChild 0 </IfModule> 18

Tomcat Application Container Tomcat will also need to be configured to handle a target connection count as follows: 1. Set the maxthreads attribute on the connector in use in server.xml to the max number of concurrent requests for the instance to be able to handle. 500 is a good value for a Tomcat on a 2-core server. 2. Set the max heap size for Tomcat to between 1.2 GB and 2.5 GB. Perm gen size to 256M. If using the asset server with a lot of image effects, or if using the embedded Solr server with a large catalog, more heap may be required. 3. A good value for the container connection pool max connection count is 100. 4. Use Tomcat 7 s jdbc connection pool. It is faster and more reliable than other Java connection pools at the moment. See Appendix F for a sample connection pool configuration for Broadleaf Commerce. 19

Broadleaf Commerce Implementation Each implementation will also need to be configured to take advantage of Hibernate level 2 cache and Thymeleaf cache (Optional if using Thymeleaf for the presentation layer). Enable these beans in the implementation s application context xml file. See Appendix F for a sample bl-override-ehcache.xml configuration. <bean id="blwebtemplateresolver" class="org.thymeleaf.templateresolver.servletcontexttemplateresolver"> <property name="prefix" value="/web-inf/templates/" /> <property name="suffix" value=".html" /> <property name="templatemode" value="html5" /> <property name="cacheable" value="true"/> <property name="characterencoding" value="utf-8" /> </bean> <bean id="blemailtemplateresolver" class="org.thymeleaf.templateresolver.classloadertemplateresolver"> <property name="prefix" value="emailtemplates/" /> <property name="suffix" value=".html" /> <property name="templatemode" value="html5" /> <property name="cacheable" value="true"/> <property name="characterencoding" value="utf-8" /> </bean> <bean id="blmergedcacheconfiglocations" class="org.springframework.beans.factory.config.listfactorybean"> <property name="sourcelist"> <list> <value>classpath:bl-override-ehcache.xml</value> </list> </property> </bean> 20

Appendix E Sample Tomcat JDBC Configuration Tomcat JDBC configuration was added to context.xml packaged with Broadleaf <?xml version="1.0" encoding="utf-8"?> <Context> <Resource name="jdbc/web" auth="container" type="javax.sql.datasource" factory="org.apache.tomcat.jdbc.pool.datasourcefactory" testwhileidle="true" testonborrow="true" testonreturn="false" validationquery="select 1" timebetweenevictionrunsmillis="30000" maxactive="100" maxidle="10" minidle="5" removeabandonedtimeout="60" removeabandoned="false" logabandoned="true" minevictableidletimemillis="30000" jdbcinterceptors = "org.apache.tomcat.jdbc.pool.interceptor.connectionstate;org.apache.tomcat.jdbc. pool.interceptor.statementfinalizer" username="${database.user}" password="${database.password}" driverclassname="${database.driver}" url="${database.url}"/> <Resource name="jdbc/storage" auth="container" type="javax.sql.datasource" factory="org.apache.tomcat.jdbc.pool.datasourcefactory" testwhileidle="true" testonborrow="true" testonreturn="false" validationquery="select 1" 21

timebetweenevictionrunsmillis="30000" maxactive="15" maxidle="10" minidle="5" removeabandonedtimeout="60" removeabandoned="false" logabandoned="true" minevictableidletimemillis="30000" jdbcinterceptors = "org.apache.tomcat.jdbc.pool.interceptor.connectionstate;org.apache.tomcat.jdbc. pool.interceptor.statementfinalizer" username="${database.user}" password="${database.password}" driverclassname="${database.driver}" url="${database.url}"/> <Resource name="jdbc/secure" auth="container" type="javax.sql.datasource" factory="org.apache.tomcat.jdbc.pool.datasourcefactory" testwhileidle="true" testonborrow="true" testonreturn="false" validationquery="select 1" timebetweenevictionrunsmillis="30000" maxactive="15" maxidle="10" minidle="5" removeabandonedtimeout="60" removeabandoned="false" logabandoned="true" minevictableidletimemillis="30000" jdbcinterceptors = "org.apache.tomcat.jdbc.pool.interceptor.connectionstate;org.apache.tomcat.jdbc. pool.interceptor.statementfinalizer" username="${database.user}" password="${database.password}" driverclassname="${database.driver}" url="${database.url}"/> </Context> 22

Appendix F Sample Ehcache Configuration Adjusting the built-in Ehcache XML best fits individual catalog size and preferences This configuration in bl-override-ehcache.xml that is packaged with the Broadleaf application will increase the size of the cache that holds catalog items. Adjust according to each catalog size and preferences. Note, this configuration also assumes that the cache is eternal and items are evicted from cache via another mechanism (e.g. Nightly job or JMS queue listener). Set eternal to false and add time-to-live values for regular cache timeout needs. <ehcache xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <cache name="blstandardelements" maxelementsinmemory="1000000" eternal="false" timetoliveseconds="3600" overflowtodisk="true" statistics="true"> <cacheeventlistenerfactory class="org.broadleafcommerce.common.cache.engine.hydratedcacheeventlistenerfacto ry"/> </cache> </ehcache> 23