Monday, July 1, 2019

Tuto Spring Boot Webservice / JPA Repository / Oracle / Maven / Eclipse

This tutorial aims to build a simple web service using spring boot .
Let's start by ddownload our start package from :
https://start.spring.io/

We will call our project solvability <=> Artifact a sub functionnality of an extranet web services portal tn.cnss.extranet.employeur <=>Group
We will also choose maven to manage dependencies, tests and continuous dev/deployement actions




fig 1- Starting springboot package


Now w will import our project in eclipse environnement :
File > Import maven project



fig 2- Import project in eclipse



fig3- Before maven configuration

Once the project was imported, we will configure maven configuration in eclipse by indicating our M2_HOME
by default maven is configured to store dependencies on /user_home/.m2/repository as shown in this image


And after modification:


fig4- After maven changes

Now we will add our unique additional dependency (oracle driver)
Here ive already in my repo oracle 11.2.0.4 driver
For those who don't have oracle driver installed :
 1- Start by downloading the ojdbc (or copy it from sqldeveloper tool if you use it)
2- run this command :
mvn install:install-file -Dfile=<path-to-oracle-driver-file>

Once all is done we add the dependency tag in our pom file

1
2
3
4
5
6
7
8
9
        <dependency>
 
            <groupId>com.oracle</groupId>
 
            <artifactId>ojdbc</artifactId>
 
            <version>11.2.0.4</version>
 
        </dependency>


fig5- Oracle dependency






fig6- application.properties file


Now let's continue:
We have to setup our /src/main/resources/application.properties file; and put some needed parmaters:
in our case:
spring.datasource.url=jdbc\:oracle\:thin\:@ip.ip.ip.ip:\port\:SID
spring.datasource.username=user_name
spring.datasource.password=user_password
spring.jpa.properties.hibernate.show_sql=true_or_false
spring.jpa.properties.hibernate.use_sql_comments=true_or_false
spring.jpa.properties.hibernate.format_sql=true_or_false
server.port = our_webservice_port_number
logging.level.org.hibernate=ERROR_see_hibernate_logging_level
NB: ERROR is less verbose



Note now our application can start without errors.

Let's continue
Now we will create our RestController (Entry points for remote invokations)
A RestController is a java class annotated with @RestController
(Reference to org.springframework.web.bind.annotation.RestController)

To make our code structured we can create a package controller under our project






fig7- controllers package



And then we create our controller  under the new created  package
In our case we will check the solvability of a customer we will need two params
root number and key (consistency)
we will invoke that method from "APP_URL/check-solvability " with simple http GET request

So we use
@GetMapping annotation

So the behavior of our code  could be
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * Check if customer is solvable or no
 * @param root
 * @param key
 * @return true or no
 */
@GetMapping( "/check-solvability/{rootValue}/{keyValue}")
public String getCustomerFinancialSituation(@PathVariable String rootValue, @PathVariable String keyValue ){
 //Some logic here
 //For exemple if we will return true always
  JSONObject output = new JSONObject();
  output.put("result", "ok");
  output.put("value","1");
  return output.toString();
 
}
1
 
1
2
Let's instroduce a business layer (it's logic that the business rules are delegated to a seperated class 
And we create our business layer or business package
1
2
3
4
5
6
and business implementations package
 
<div class="separator" style="clear: both; text-align: center;">
<b style="font-family: "Times New Roman"; white-space: normal;">fig8- business package</b>
</div>

And we create this interface that will be implemented by the financial dev team 


fig9- business interface

Let's continue
Once interface is created we can proceed to business injection in the main controller, this can be done by these two lines
1
2
@Autowired
private FinancialBusiness financialBusiness;

fig10- business injection


Lets's continue

Now we create implementation package for business, and a specific implementation for our previously ceated interface Financial business




fig11- business interface implementation
1
 

if you want to interoduce repositories cantact me for more advanced example.