-
Notifications
You must be signed in to change notification settings - Fork 0
/
4.8.2.tex
114 lines (106 loc) · 5.84 KB
/
4.8.2.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
\lstsetjava
\subsection{Umsetzung in Java}
\subsubsection{Datenbankzugriff}
Der Zugriff auf unsere Datenbank über Java wurde mit Springboot realisiert. Spring Boot ist ein Framework, das die Entwicklung von Spring-basierten Anwendungen erleichtert, indem es Werkzeuge zur Verfügung stellt, um eine vollständig in sich geschlossene, in Jars/Wars verpackte Anwendung zu erstellen. Wir verwenden Maven, ein mächtiges Projektmanagement-Tool, das auf POM (Project Object Model) basiert, um einen ArangoDB-Starter in unser Projekt SpringBoot zu integrieren. Maven wird im Allgemeinen für den Projektaufbau, die Abhängigkeiten(dependency) und die Dokumentation verwendet.
Um sich schließlich mit ArangoDB zu verbinden, wird die gesamte notwendige Konfiguration von ArangoDB in eine Klasse verpackt, in der eine Verbindung zur ArangoDB-Datenbank hergestellt wird. Um sich schließlich mit ArangoDB zu verbinden, wird die gesamte notwendige Konfiguration von ArangoDB in eine Klasse verpackt, in der eine Verbindung zur ArangoDB-Datenbank hergestellt wird. Für die Konfiguration benötigen wird den Host ( 10.20.110.48 ), den Port ( 8529 ), den Benutzer (), das Passwort () und den Namen der Datenbank.
\\ \\
\begin{lstlisting}[numbers=left,language=c++, caption={Datenbank-Konfiguration}]
@Configuration
@EnableArangoRepositories(basePackages = { "hz.arangoDb.sldbVorlesungProjekt" })
public class ArangoDBConfiguration extends AbstractArangoConfiguration {
/**
* Database url (server + port) & credentials configs
* @return
*/
@Override
public ArangoDB.Builder arango() {
ArangoDB.Builder arango = new ArangoDB.Builder()
.host("10.20.110.48", 8529)
.user("")
.password("");
return arango;
}
/**
* Database name
* @return
*/
@Override
public String database() {
// return "arangoDBDemo";
return "police_register";
}
}
\end{lstlisting}
.\subsubsection{Schnittstelle nach Außen}
SpringBoot bietet auch die Möglichkeit, eine REST-API zu implementieren und diese über verschiedene HTTP-Methoden verfügbar zu machen. Um einen Controller auf SpringBoot als REST-Schnittstelle zu definieren, fügen Sie einfach die Annotation @RestController hinzu. Danach wird in jeder Methode des Controllers auch die Annotation @GetMapping , @PostMapping verwenden, um zu definieren, über welche HTTP-Methode diese Ressource exponiert wird.
\subsubsection{Anwendungsszenario 1}
für Anwendungsszenario 1 wurde eine annotierte @RestController-Klasse erstellt, die eine Methode namens GetCarByColor(String carID) enthält. Diese Methode ist ebenfalls mit @GetMapping annotiert, was den Zugriff auf die Ressource über die HTTP-GET-Methode ermöglicht. Diese Methode gibt als Ressource ein Car-Objekt in Form von Json zurück. Um diese Ressourcen zu erhalten, sendet Java eine AQL-Abfrage mit der Car-Color des zu suchenden Autos an die ArangoDB-Datenbank. ArangoDB wiederum sucht das Auto und gibt das Ergebnis des gefundenen Autos zurück. \\
\begin{lstlisting}[numbers=left,language=c++, caption={Auto nach Farbe}]
@GetMapping("cars/{color}")
public CarsPayload getCarsByColor(@PathVariable("color") String color){
long time = 0;
List<Car> allByColor;
CarsPayload carsPayload = new CarsPayload();
try {
time = System.currentTimeMillis();
allByColor = carRepository.findAllByColor(color);
} finally {
time = System.currentTimeMillis() - time;
carsPayload.setTime(time);
}
carsPayload.setCars(allByColor);
return carsPayload;
}
\end{lstlisting}
\subsubsection{Anwendungsszenario 2}
Analog zum vorherigen Anwendungsszenario 1 wurde eine Methode getCarById(String car-Id) mit der Annotation @GetMapping erstellt. Diese Methode sendet eine AQL-Anfrage an die Datenbank und gibt ein Objekt Car zurück. \\
\begin{lstlisting}[numbers=left,language=c++, caption={Auto nach ID}]
@GetMapping("/car/{id}")
public CarPayload getCarById(@PathVariable("id") String id){
CarPayload carPayload = new CarPayload();
Optional<Car> carByID;
long time = 0;
try {
time = System.currentTimeMillis();
carByID = carRepository.findById("cars/"+id);
} finally {
time = System.currentTimeMillis() - time;
carPayload.setTime(time);
}
if (carByID.isPresent()){
Car car = carByID.get();
carPayload.setYear(car.getYear());
carPayload.setModel(car.getModel());
carPayload.setId(car.getId());
carPayload.setColor(car.getColor());
return carPayload;
}
return null;
}
\end{lstlisting}
\subsubsection{Anwendungsszenario 3}
für das dritte Anwendungsszenario geht es darum, eine statistik über die verschiedenen Modelle von Autos zu erstellen, die üblicherweise kollidieren. die Implementierung dieser Methode erfolgt ebenfalls wie oben beschrieben. auch diese Methode wird mit @GetMapping annotiert.\\
\begin{lstlisting}[numbers=left,language=c++, caption={Suche im Graph}]
@GetMapping("/car/{id}")
public CarPayload getCarById(@PathVariable("id") String id){
CarPayload carPayload = new CarPayload();
Optional<Car> carByID;
long time = 0;
try {
time = System.currentTimeMillis();
carByID = carRepository.findById("cars/"+id);
} finally {
time = System.currentTimeMillis() - time;
carPayload.setTime(time);
}
if (carByID.isPresent()){
Car car = carByID.get();
carPayload.setYear(car.getYear());
carPayload.setModel(car.getModel());
carPayload.setId(car.getId());
carPayload.setColor(car.getColor());
return carPayload;
}
return null;
}
\end{lstlisting}