Web Application with Database Backend
So far, I’ve only deployed trivial application on my docker cluster. In this article, I want to explore the level of difficulty in deploying a more realistic application. Being a lazy person who does not want to create a web application from scratch, I searched the Internet for a ready-made web application using a database backend as this kind of application is commonly deployed in the production environments. I came across a WEB4J sample application called the “Fish and Chips Club” which should do the job. From now on, I am going to refer to this application as “Fish”. This application includes features to:
- edit club members
- edit local restaurants
- edit ratings of each restaurant
- add new lunches (a given restaurant on a given day)
- RSVP for each upcoming lunch
- interact using a simple discussion board
- produce simple reports
- provide a simple search page
And it uses 3 databases running on MySQL. You can find out more about how to configure this application here.
The disadvantage of using ARM64 architecture machines like ODROID-C2 is that you don’t have that many docker images readily available to you on Docker Hub to choose from like INTEL-based machines. I can find only 1 MySQL docker image and no Apache Tomcat images at all! And this application requires Tomcat to run. However, this is not a showstopper as I can always create my own docker image!
In the following sections, I am going to deploy MySQL and Fish in different ways and assess their pros and cons. It will be a great learning experience for me as, like most of you, I am new to this too Continue reading Building My Odroid-C2 Docker Cloud Part 4 – Application Deployment
The journey so far
My last article documented how I built Docker 1.12.0 from source on my Odroid-C2. Docker 1.12 has swarm mode ie, clustering built in. In this article, I am assembling my 5 Odroid-C2 single board computers into a cluster and test-driving the cluster with simple swarm mode commands. This is to make sure that Docker 1.12 is working before getting into more advanced swarm mode features and executing a more realistic workload on the cluster in Part 4. Continue reading Building My Odroid-C2 Docker Cloud Part 3 – Build and Test Drive
In my previous article, I documented my search for a stable Linux to run my Docker cloud on. The next thing for me to do is to select the version of Docker to use. I am in a dilemma in which I want to use the latest Docker 1.12 with inbuilt swarm mode instead of having to build my own cluster using additional packages such as Consul, Zookeeper, etc. but the version I got using apt-get is version 1.10. There is an update but it is still only 1.11. Since clustering (swarm mode) is in-built in 1.12, there is no point pursuing a dead end in Docker 1.11. Looking around the Internet, I could not find any pre-built Docker 1.12 package for Odroid-C2 anywhere. Reluctant as I was, I had no choice but to build my own Docker 1.12 for my Odroid-C2 from source. As I was new to this, I expected issues and confirmed that Murphy’s Law still rules. This article documents my attempt to build Docker 1.12.0 on my Odroid-C2. Continue reading Building My Odroid-C2 Docker Cloud Part 2 – Building Docker 1.12.0 (with Swarm Mode)
In the previous installment, I outlined the use case or business scenario we are implementing using the 3 JBoss middleware products. In this installment, I am going to describe the Fuse to Business-as-a-service (Business rules application on the Realtime Decision Server) integration which validates the XML data and the Fuse to BPMS integration which kicks off a business process instance for a mortgage application as well as the Fuse to JBoss Data Virtualisation integration. Continue reading Making JBoss Fuse, Data Virtualisation and BPMS Work Together – Part 2
I’ve just taken delivery of 5 Odroid-C2 single board computers (SBCs) from Hardkernel. In case you don’t know, ODROID-C2 is a 64-bit quad-core SBC with specifications above and beyond those of Raspberry Pi 3. For example Odroid-C2 runs the quad-core 64-bit A53 processors at 2GHz (vs Raspberry Pi 3’s 1.2 GHz), Gigabit ethernet (vs 10/100 Mbps Ethernet), 2Gbytes of memory (vs 1Gbytes), supports 4K display (vs HD), etc.
I am planning to set up my 5 Odroid-C2 SBCs as a Docker cluster to form an experimental private cloud. But before I can do that, I must choose a stable Operating System (OS) for the SBCs to run on. Here is what I went through in selecting my OS. Continue reading Building My Odroid-C2 Docker Cloud Part 1 – In Search of a Stable Linux
Red Hat has been using the phrase “Accelerate, Integrate and Automate”, for sometime now, to explain its comprehensive middleware portfolio to its customers. Red Hat middleware does not work in isolation. It is imperative that these different middleware products can work together to achieve a business outcome.
In this article, I am going to show you how to make the 2 “Integrate” products: JBoss Fuse (Fuse), JBoss Data Virtualisation (JDV) and the “Automate” products: JBoss Business Process Management Suite (BPMS)/JBoss Business Rules Management System (BRMS) work together. Since BPMS/BRMS and JDV run on JBoss Application Server (EAP), I can even claim that this example involves middleware products of all 3 categories ie, Accelerate, Integrate and Automate. Continue reading Making JBoss Fuse, Data Virtualisation and BPMS Work Together – Part 1
In Part 1, I describe what Data Virtualisation is and how one product, namely JBoss Data Virtualisation, works and its architecture. In this instalment, I am going to describe the implementation of a virtual database using 3 data sources. I am also going to show you how to interact with the virtual database using the SquirrelSQL client. The intention of this article is to give you some ideas as to how easy it is to aggregate several data sources to construct a virtual database. It explains the implementation on a high level only and does not give a step-by-step instruction of how to do it from scratch. Continue reading JBoss Data Virtualization Part 2 – An Example
The Journey Begins
With the release of BPMS/BRMS 6.3 back in May, I think it is time for me to embark on a journey to explore its new features. What better to do than migrate an existing business rules application which I deployed on the Realtime Decision Server in BPMS 6.1 to 6.3’s new Intelligent Process Server. A piece of cake, so I thought… Continue reading BPMS/BRMS 6.3: An Intelligent Process Server Odyssey
Have you ever lamented over how difficult it is to test a CEP application, let alone doing a demo? Common challenges include:
- How to generate events for testing a CEP application?
- How to demo a CEP application?
- Cannot be real-time, it takes too long
- Lack of infrastructure during demo
- Need repeatable outcome
In this article, I am going to show you a framework that I developed which allows you to define external events in a CSV file, play them back to your CEP application in demonstrations in accelerated time. This framework can also be used to generate a large volume of events based on event arrival distribution either in realtime or accelerated time to load test your CEP application. It is such a versatile tool that you can even use it to perform discrete event simulation (not described in this article).
The framework solves all the problems listed earlier by allowing you to:
- Configure load to drive your CEP application
- Run your CEP application in accelerated time
- See the results quickly
- Use it as a reusable infrastructure for CEP application testing and demos
- Achieve repeatable outcome
Examples will be provided to showcase the capabilities of the framework including playing back configured events for a CEP application and realtime load generation using JBoss Fuse/A-MQ and event arrival patterns (distributions).
This article is divided into the following main sections:
- The Optometrist CEP Application – this CEP application shows how to configure individual events to drive the CEP application in a CSV file.
- The Stock Price CEP Application – this is a simple CEP Application which illustrates the event generation capability based on event arrival distribution.
- Realtime Load Generation via Fuse and A-MQ integration – this section illustrates how realtime load generation can be achieved running multiple instances of the load generator to feed the Stock Price application via Fuse and A-MQ by applying software design patterns to loosely couple the load generator and the CEP application.
- How it works – shows the UML class diagram containing the load testing framework classes, their attributes, operations and relationships. It also describes how the framework works including how the load generator is loosely coupled to your CEP application using the Observer design pattern.
The first few sections give you an overview of the capabilities of the framework. The “How it works” section outlines how the framework works. Continue reading A Load Generation Framework for CEP Application Testing and Demos
In my last article, I showed you how to use the Java 7’s Fork/Join framework to write a parallel program. If you examine the code carefully, you will notice that it looks quite different from normal serial Java code. Developers having to write code differently for parallel programs imposes a serious barrier to its wide adoption as a framework for writing parallel programs. What developers want is that they can write code that can be executed serially as well as in parallel. Enter lambdas and streams. The Java community has observed the trend (Moore’s Law, hitting the frequency wall ie, power dissipation issues as described in my previous article) and recognised that chip designers have nowhere to go but parallel. Consequently, software has to be written such that it can take advantage of the parallel hardware. And the OpenJDK Project Lambda was started in Dec 2009 with the aims to support programming in a multicore environment by adding closures and related features to the Java SE platform. The objectives are realised in Java SE 8 as JSR 335: Lambda Expressions for the Java Programming Language. In this article, I am going to show you how to use lambdas and streams to implement a Mandelbrot generation parallel program and compare its performance with the Fork/Join framework we examined last time. Continue reading Java Parallel Programming Part 3: Lambdas and Streams