Mature Microservice Using J-Framework

This example demonstrates the usage of the j-framework in creating a mature microservice.

Prerequisites:

  1. You should have JDK 17+ Installed. (Click Here).

  2. You should create a Maven Project.

  3. You should enable snapshot versions. (Click Here).

Project Content:

This section contains what you should add to your code structure for this example.

  1. Maven Project with pom.xml that has the following contents:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.jalalkiswani</groupId>
		<artifactId>j-app-webstack</artifactId>
		<version>7.0.0-SNAPSHOT</version>
	</parent>
	<artifactId>j-framework-microservice-mature-example</artifactId>
	<packaging>war</packaging>
</project>
  1. Java Model class is located at src/main/java/com/app/person/Model.java that has the following content:

package com.app.person;

import java.io.Serializable;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name="person")
public class Model implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id")
	private Integer id;

	@Column(name="national_id")
	private String nationalId;

	@Column(name="name")
	private String name;

	@Column(name="email")
	private String email;

	@Column(name="address")
	private String address;


	public void setId(Integer id){
	  this.id=id;
	}

	public Integer getId(){
	 return this.id;
	}

	public void setNationalId(String nationalId){
	  this.nationalId=nationalId;
	}

	public String getNationalId(){
	 return this.nationalId;
	}

	public void setName(String name){
	  this.name=name;
	}

	public String getName(){
	 return this.name;
	}

	public void setEmail(String email){
	  this.email=email;
	}

	public String getEmail(){
	 return this.email;
	}

	public void setAddress(String address){
	  this.address=address;
	}

	public String getAddress(){
	 return this.address;
	}


	@Override
	public boolean equals(Object obj) {
	  if (obj == null) {
		return false;
	  }
	  return this.getId().equals(((Model) obj).getId());
	}

	@Override
	public int hashCode() {
	  if(this.id==null) {
	    return toString().hashCode();
	   }
	  return this.id.hashCode();
	}

	@Override
	public String toString(){
	  StringBuffer buf=new StringBuffer();
	  buf.append(this.id).append(",");
	  buf.append(this.nationalId).append(",");
	  buf.append(this.name).append(",");
	  buf.append(this.email).append(",");
	  buf.append(this.address).append(",");
	  return buf.toString();
	}
}
  1. Controller located at src/main/java/com/app/person/Controller.java which contains the following:

package com.app.person;

import java.util.List;

import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.core.Response;

import com.jk.core.util.JK;
import com.jk.data.dataaccess.JKDataAccessFactory;
import com.jk.data.dataaccess.orm.JKObjectDataAccess;
import com.jk.services.server.JKAbstractRestController;

@Path("/persons")
public class Controller extends JKAbstractRestController{
	JKObjectDataAccess da = JKDataAccessFactory.getObjectDataAccessService();

	@GET
	public Response getAll() {
		List<Model> list = da.getList(Model.class);
		return Response.status(200).entity(list).build();
	}

	@GET
	@Path("/{id}")
	public Response find(@PathParam("id") int id) {
		Model person = da.find(Model.class, id);
		if (person == null) {
			return Response.status(404).build();
		}
		return Response.status(200).entity(person).build();
	}

	@POST
	public Response insert(Model person) {
		da.insert(person);
		return Response.status(201).entity(person).build();
	}

	@PUT
	@Path("/{id}")
	public Response update(@PathParam("id") int id, Model person) {
		JK.fixMe("Validate againest the provided id, and check if exists");
		da.update(person);
		return Response.status(201).entity(person).build();
	}

	@DELETE
	@Path("/{id}")
	public Response delete(@PathParam("id") int id) {
		da.delete(Model.class, id);
		return Response.status(201).build();
	}

}
  1. Main java class located at src/main/java/com/app/App.java which contains the following:

package com.app;

import jakarta.ws.rs.ApplicationPath;

import com.jk.services.server.JKServiceConfig;
import com.jk.web.embedded.JKWebApplication;

@ApplicationPath("app")
public class App extends JKServiceConfig{
	public static void main(String[] args) {
		JKWebApplication.run(8080,false);
	}
}

Alternatively, you can clone or download the tutorial repository then import the project into your IDE.

How to run Project:

  1. Set up the project with the content shown above.

  2. Inside your IDE, go to the src/main/java/com/app/App.java class.

Main Class

  1. Next, run it as a Java Application.

Run as Java Application

  1. Then the program will start running, making the mature microservice available, you can make sure it’s up properly by opening any browser and connecting to localhost through port 8080.

localhost:8080

  1. You can now connect to the microservice using Mature Microservice Client or a Web Client.