Mature Microservice Using J-Framework
This example demonstrates the usage of the j-framework in creating a mature microservice.
Prerequisites:
-
You should have JDK 17+ Installed. (Click Here).
-
You should create a Maven Project.
-
You should enable snapshot versions. (Click Here).
Project Content:
This section contains what you should add to your code structure for this example.
-
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>
-
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();
}
}
-
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();
}
}
-
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:
-
Set up the project with the content shown above.
-
Inside your IDE, go to the
src/main/java/com/app/App.java
class.
-
Next, run it as a Java Application.
-
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.
-
You can now connect to the microservice using Mature Microservice Client or a Web Client.