Wilson Mar bio photo

Wilson Mar

Hello. Hire me!

Email me Calendar Skype call 310 320-7878

LinkedIn Twitter Gitter Google+ Youtube

Github Stackoverflow Pinterest

Sample Java Spring app for your abuse and amusement

Gitter</p>

Overview

This page describes the various ways to install and use a simple Java application for learning Java Spring and exploring JVM tools.

The app provides a shopping cart because it’s a common use case on the internet. Different items within several categories (of pets).

NeoLoad uses it as a sample app in their docs.

Landing page (Main Menu)

jpetstore6 main menu

The page has 3 columns under a header. The image above was adjusted to the smallest width without wrapping. The page design is HTML4 transitional, not HTML5 “responsive” for mobile, which is an SEO issue.

Thankfully, one company has it running all the time at http://demo.kieker-monitoring.net/jpetstore/actions/Catalog.action It rated 90/100 for Desktop on Google Page Speed and 83/100 for Mobile. Google recommends:

Use case loops

An explanation of the UI actions is available by clicking the (?) on the heading, at
http://demo.kieker-monitoring.net/jpetstore/help.html

This site map is from the comparison by Clinton Begin (of Alberta):

jpetstore6 site map

Performance Tests

Performance testing needs a set of loops to impose artificial load.

  1. Landing page and Info (?) page for network variability measurement.

  2. Browsing through items (without login or buying) to specifically stress the web server.

    Rather than coding to click specific items, this activity is often specified by a file with the test program iterates through.

  3. Register to see how many the system can accommodate when the system is widely announced to the public.

    QUESTION: j2ee is the default user? What’s the password?

    The user registration link is not on the landing page (Main Menu), reached after a click of Sign In.

    TODO: Variations in registration data from a file to load various users.

  4. Login to see what happens when everyone arrives at the same time (such as at a call center during start of shift).

  5. Log-off

  6. Search form usage, especially for form fields that return an autocomplete list for user ease-of-use.

  7. Add to cart from an item listing, which adds to the database for each unique user, specifically to stress the database.

  8. View cart.

  9. Purchase to ensure that payment gateways can keep up with a lot of people buying at once.

    Except the JPetStore app does not connect with a payment gateway.

  10. End-to-end with all the above to ensure that the system can handle a pattern of work during scalability testing (to emulate a mention on Reddit or Hacker News that causes a buying frenzy).

  11. My Orders lists order history for a user, by reading from the database. A link to it is at the bottom of the User Information page after a user is logged in and has completed an order.

Additionally, there are error responses to each of the above, created by “negative” tests:

  1. Server unavailable (NGINX).

  2. Item not available during browsing.

  3. Registration error (such as bad email, user already defined, etc.).

  4. Login error, such as forgotten password change.

  5. Search not found.

etc.

Options for performance testing apps

Since JPeterStore was built for developers, missing are some features in the WebTours app Mercury/HP built to use as a sample app during demos and training for LoadRunner.

Pattern of iteration

To mimic real-life load across the various pages, not every iteration would invoke “My Orders”. So the automation scripts would need to use a percentage chance when the action is performed.

Ideally, we would have a data-driven approach where a file external to the code specifies the pattern of invocation. This approach would not require a re-compile after changes.

Reset data

QUESTION: How to reset the Orders data for a user?

UI

On the Main Menu, there are links to category lists from the text at the left, the headings at the top, and icons at the center.

  • Fish
  • Dogs
  • Cats
  • Reptiles
  • Birds

User Registration

Headings

On the heading, when a user is signed in, “Sign In” changes to “My Account”.

User Profile Options

These change behavior, which automation scripts need to respond to:

  • Enable MyList

  • Enable MyBanner

Local Installation

WARNING: There are several obsolete versions on the internet, such as v4 on Sourceforge.

There are several variations

http://support.neotys.com/misc/jpetstore-test.zip

MyBatis

Rather than downloading a release zip file, use a Git client, as the readme recommends.

TODO: Create a bootstrap script that does the following:

  1. Create a folder to hold. I prefer to have a container folder (jpetstore) because there are multiple repositories:

    ~/gits/jpetstore/jpetstore-6

    ~/gits/jpetstore/mybatis-spring-boot-jpetstore
    is an alternative from Kazuki Shimizu of Japan. It is implemented using Thymeleaf 3.0 templating.

  2. In a Terminal, obtain the whole repository with its history:

    
    git clone https://github.com/mybatis/jpetstore-6.git
    cd jpetstore-6
    
  3. Have Maven download and install dependencies defined in pom.xml:

    
    mvn clean package
    

    JPetStore 6 should run in any Servlet 2.5 y JSP 2.1 compliant Java server.

    Eclipse is not needed. You can run the sample from your favorite IDE or the command line.

  4. Startup the Tomcat server and deploy web application using the Cargo Maven plug-in

    
    mvn cargo:run
    

    The pom.xml file has several versions of Tomcat loaded.

  5. In a browser, use the app as a user:

    
    http://localhost:8080/jpetstore/
    

    You should now see the entry screen:

    jpetstore6 enter store

  6. Click “Enter the store” for the main menu.

Change port

  1. To change the port from the default 8080 to something else, edit file:

    target/cargo/configurations/tomcat8x/conf/server.xml</strong>
    
    
  2. Scroll down to the line:

    &LT;Connector SSLEnabled=”false” URIEncoding=”ISO-8859-1” connectionTimeout=”20000” port=”8080” protocol=”HTTP/1.1” redirectPort=”8443” scheme=”http” secure=”false”/>

  3. Change the number.

  4. Save the file and restart the server.

Dependencies

http://www.mybatis.org/jpetstore-6/dependency-info.html

  • Java 1.6 and above (1.8.11 at January 2017)

  • Spring 4

  • Stripes - https://github.com/StripesFramework

  • MyBatis 3 SQL mapping framework for Java
    http://blog.mybatis.org/p/products.html

    MyBatis mappers and dependency injection lets you build applications without dependencies. Thus, the source has no code to deal with JDBC, to create objects or bind them or to handle transactions.

    (There is a port to .NET)

    The iBATIS Database Layer uses simple XML descriptor filesto describe the inputs and outputs of each SQL statement. It allows the programmer to simply pass a JavaBean into a MappedStatement as a parameter (input) and receive a JavaBean as a result (output).

  • Formatter Tag Library by Tak Yoshida of ibatis.

  • Tomcat web server from the Apache Foundation.

  • JUnit for Mokito

    Used by tests

Monitoring

Online Solution http://demo.kieker-monitoring.net/

Java Code

JPetStore v6 is vendor-independent open source freeware first released in 2002 in 3,154 lines of code. It uses the Jakarta Struts Model-View-Controller based presentation layer. It has NO SQL in code nor stored procedures running in a database, so is independent of database vendors (Oracle SQL in particular). PostgreSQL is free.

It has no generated code, nor HTML in the database.

Eclipse is not required, but there is a MyBatis plug-in

Docs at http://www.mybatis.org/jpetstore-6/ says:

The purpose of JPetStore 6 is to demonstrate how to build a web application with very few classes and no advanced coding skills. You just need to know plain Java and SQL.

Java source code is in the src/mainjava/org/mybatis/jpetstore folder.

Predecessors

Sun created a J2EE Pet Store, in a massive 15,000 lines, as a demonstration of various coding features (not for benchmarking).

Microsoft contracted with Vertigo Software to create a sample .Net Pet Shop when it orginally debuted its .NET framework. The repo had 3,484 lines of code and was tuned for benchmarking speed rather than coding best practices.


More on IoT

This is one of a series on IoT:

  1. IoT Acronymns and Abbreviations

  2. IoT Apprentice school curriculum
  3. IoT use cases
  4. IoT reminders prevent dead mobile battery
  5. IoT ceiling dumper

  6. IoT text to speech synthesis
  7. IoT AWS button
  8. Intel IoT
  9. IoT Raspberry hardware
  10. IoT Raspberry installation

  11. IoT Clouds
  12. Samsung IoT Cloud

  13. Predix basics
  14. Predix installation
  15. Predix services
  16. Predix programming