Assignment #3 – Development Environment – components and setup [15%]
This assignment relates to the following Course Learning Requirements:
CLR 2: Install and use enterprise programming and deployment tools.
CLR 3: Implement Web Server integration with enterprise applications.
CLR 6: Implement and Integrate various Java based technologies used in the enterprise environment.
Objective of this Assignment:
Ensure that you are able to implement the knowledge obtained from module content into real life code.
With that, you should be able to demonstrate the following:
– Working environment
– Working services
– Working intercommunication between services
Pre-Assignment Instructions:
To prepare you for this assignment, read the module 8 content and follow the embedded learning activities.
For this assignment it is required to have installed Ubuntu VM. This installation was discussed in module 8, which subsequently guided you to the setup of microK8s cluster.
NOTE: If you prefer to setup your K8s cluster in Windows and choose minikube instead of microK8s – that’s not a problem as well.
The other required software for this assignment is the installation and setup of an IDE of your choice
IntelliJ IDEA, Eclipse or Netbeans sitting inside your VM.
As a final pre-requisite to this assignment, a database installation must be inside your local cluster.
For simplicity, you can use MySQL v.8+ (https://dev.mysql.com/downloads/).
For instructions on installing the DB inside your K8s cluster, please read the following: https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/.
NOTE: Pay attention – the version of the MySQL cluster, used in the example above is 5.6. If you’re OK with that you may follow copy-paste pattern, otherwise you need to change the version to whatever you want from DockerHub. Another thing to pay your attention is the password in the deployment file.
Assignment description:
Remembering the Basic Functionalities from Assignment #1
In the first assignment you started development on a backend for a Twitter-like application. Please remember its basic functionality:
There should be at least 2 roles – Producer and Subscriber;
Producer role is the same as Subscriber but has some extra capabilities – it can produce messages, which Subscribers get;
User may have both roles at the same time;
Users having Subscriber role may subscribe to as many Producers as they want to;
All messages stored in database, can be easily searched based on at least criteria:
User (Producer) ID – means who wrote it;
Message content
Understanding the general concept for this application from Assignment #2
To recap Assignment #2, as well you were provided with the following as a general concept for your application.
There’s a back-end application which has an exposed API allowing users to be authenticated and authorized (use data model from module 5) – UserManagementService;
User must be logged in and have obtained a token. For simplicity, imagine the token is a simple ID, like number, UUID, hash, something else, producing by the UserManagementService at the first authentication request and returned to the user for further authorization purposes.
After the user has been authenticated and obtained a token, he/she is able to use other APIs, related to publishing and obtaining messages; in case of unauthenticated access user should be simply redirected to UserManagementService to obtain a token; if user has a token but his/her rights are insufficient to perform a request – there should be appropriate response with HTTP status 401;
Using other APIs, user is able to publish messages and/or receive messages published by other users.
Assignment #3 Overview
As you embark on your third consecutive assignment, at this point in your development, you should have finished all preparation steps in the 2 previous assignments. This preparation has led you to this assignment, in which you are required to convert your previous work into a working code according to the data model and UMLs you’ve previously created.
For simplicity purposes, consider the following:
All users trying to achieve an API for now need to provide a token correlated to any chosen user from UserManagementService; your service
This triggers API,
Therefore you need to authorize any incoming request by making a blocking API call to UserManagementService to obtain permission for this chosen user by comparing it with the issues tokens.
For now use UUID as a token.
That UUID should be generated for any user, requesting UserManagementService with username and password in case that username and password are fit to any record inside the UserManagementService’s database.
Note: This is also a way to implement tokens for the application created in Assignment #2
As a package name for your application, please use the following pattern: org.ac.cst8277.{Last Name}.{Fisrt Name}
You should use Spring Boot Framework for your services with Netty as an application server (use the following dependency in your pom.xml file):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
Assignment Tasks:
Now that you have prepared all required content for your application in Assignments #1 and #2, you will now begin implementation of the following.
What you should do:
Having a data model from assignment # 1 and UML diagrams from assignment # 2 you need to implement your services up to a working condition.
As a result of this assignment you should get working and tested code providing basic Twitter functionality.
Submission Guidelines:
You need to submit an archive with name pattern {Course #}_{Section #}_{Last name}_{First name}.zip containing your project source code and short video file demonstrating the following:
How you build all services (either from terminal window or from your IDE)
How you start all services and their status after start, including host and port they start listen to
How you issue your requests:
Get all users
Get all roles
Add user
Get all messages
Get messages produces by specific producer
Get messages for specific subscriber
Please pay attention your video should be quite short and not exceed the limit of 100Mb per file. It is not required to record yourself, your voice with comments or anything else, unrelated to working application. In my case it was enough to record a terminal window and an application I used to issue HTTP requests (Postman), so you may do exactly the same.
Assignment Grading Rubric (15%)
Criteria
Excellent
80-100%
Good
50-79%
Requires Improvement
<50%
Points
Assignment Quality
All information provided is accurate
All information is clearly expressed and well explained
Contains original ideas, connections or applications
Most information provided is accurate
All information clearly expressed and explained
Contains mainly original ideas, connections or applications
Some or no provided information offered
Information is rarely or never clear and require further explanation
Many non- original ideas, or unclear connections or applications
/3
Comments
Assignment Knowledge and Skills Demonstration
Clear, concise synthesis of course content to demonstrate understanding of topic
All ideas are clearly developed, organized logically, and connected with effective transitions
Explores ideas, supports points fully using a balance of evidence, uses effective reasoning to make useful distinctions
All relevant course and topic links are made
Evidence of some synthesis of course content to demonstrate understanding of topic
Some unified and coherent ideas are developed with effective transitions
Supports most ideas with effective examples, and/or references, and details, makes key distinctions
Most relevant course and topic links are made
Lack of evidence or weakness in the synthesis of course content to demonstrate understanding of topic
Develops and organizes ideas that are not necessarily connected. Some ideas seem illogical and/or unrelated
Presents ideas in general terms, most ideas are inconsistent/unsupported, and reasoning is flawed or unclear
Some or no relevant course and topic links are made
/11
Comments
Assignment Structure
Formatted as per assignment details
Structure and format enhance delivery of the information
Formatted as per assignment details in most components
Structure and format fits well with the delivery of the information
Formatting has not been followed
Structure and format are unclear and impedes delivery of the information
/1
Comments
Total Points
/15