Development Environment

93 views 10:22 am 0 Comments March 20, 2023

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