Sezione restaurant server finita tranne listing CRUDUtils
This commit is contained in:
parent
ca752971c2
commit
8954f2b793
3 changed files with 111 additions and 32 deletions
|
@ -1,6 +1,6 @@
|
||||||
@online{guacdoc:arch,
|
@online{guacdoc:arch,
|
||||||
title = "Guacamole Manual, Chapter 1. Implementation and architecture",
|
title = "Guacamole Manual, Chapter 1. Implementation and architecture",
|
||||||
author = "The Apache Software Foundation",
|
author = "The Apache Software Fundation",
|
||||||
url = "https://guacamole.apache.org/doc/gug/guacamole-architecture.html",
|
url = "https://guacamole.apache.org/doc/gug/guacamole-architecture.html",
|
||||||
note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]"
|
note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]"
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,12 @@
|
||||||
url = "https://ionicframework.com/framework",
|
url = "https://ionicframework.com/framework",
|
||||||
note = "[Online; in data 30-aprile-2018]"
|
note = "[Online; in data 30-aprile-2018]"
|
||||||
}
|
}
|
||||||
|
@online{guacamole:website,
|
||||||
|
title = {Apache Guacamole\copyright},
|
||||||
|
author = "The Apache Software Foundation",
|
||||||
|
url = "https://guacamole.apache.org",
|
||||||
|
note = "[Online; in data 1-maggio-2018]"
|
||||||
|
}
|
||||||
@online{agomir:website,
|
@online{agomir:website,
|
||||||
title = "Agomir S.p.A. - Software - Sistemi - Servizi",
|
title = "Agomir S.p.A. - Software - Sistemi - Servizi",
|
||||||
author = "Agomir S.p.A.",
|
author = "Agomir S.p.A.",
|
||||||
|
|
BIN
italian.pdf
BIN
italian.pdf
Binary file not shown.
135
main.tex
135
main.tex
|
@ -48,7 +48,7 @@
|
||||||
% listings configuration
|
% listings configuration
|
||||||
\begin{it}
|
\begin{it}
|
||||||
\renewcommand{\lstlistingname}{Listato}
|
\renewcommand{\lstlistingname}{Listato}
|
||||||
\renewcommand{\lstlistlistingname}{Lista dei listati}
|
\renewcommand{\lstlistlistingname}{Elenco dei listati}
|
||||||
\end{it}
|
\end{it}
|
||||||
\lstset{
|
\lstset{
|
||||||
basicstyle=\small\ttfamily,
|
basicstyle=\small\ttfamily,
|
||||||
|
@ -57,7 +57,11 @@
|
||||||
columns=fullflexible,
|
columns=fullflexible,
|
||||||
commentstyle=\color{gray},
|
commentstyle=\color{gray},
|
||||||
keywordstyle=\bfseries,
|
keywordstyle=\bfseries,
|
||||||
escapeinside={\%*}{*)}
|
escapeinside={\%*}{*)},
|
||||||
|
aboveskip=2em,
|
||||||
|
captionpos=b,
|
||||||
|
abovecaptionskip=1em,
|
||||||
|
belowcaptionskip=1em
|
||||||
}
|
}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
@ -124,17 +128,22 @@
|
||||||
\begin{it}
|
\begin{it}
|
||||||
\section{Gestione dei progetti}
|
\section{Gestione dei progetti}
|
||||||
|
|
||||||
Non ho diretto controllo manageriale su ciò che sviluppo in azienda, in quanto ho un ruolo simile a quello di un
|
Non ho diretto controllo manageriale su ciò che sviluppo in azienda,
|
||||||
dipendente. L'incarico di gestire l'andamento dei progetti spetta a Mario Goretti, A.D. dell'azienda e capo del settore
|
in quanto ho un ruolo simile a quello di un dipendente. L'incarico di gestire
|
||||||
di sviluppo software gestionale (\textsc{SWG}), e ai suoi collaboratori.
|
l'andamento dei progetti spetta a Mario Goretti, A.D. dell'azienda e capo
|
||||||
|
del settore di sviluppo software gestionale (\textsc{SWG}), e ai suoi collaboratori.
|
||||||
|
|
||||||
In generale sviluppo i progetti da solo. Collaboro con il collega Daniele Crippa per l'interfacciamento con i software
|
In generale sviluppo i progetti da solo. Collaboro con il collega Daniele
|
||||||
aziendali esistenti e per l'organizzazione di nuovi progetti, nonché consigli e dritte varie.
|
Crippa per l'interfacciamento con i software aziendali esistenti e per
|
||||||
|
l'organizzazione di nuovi progetti, nonché consigli e dritte varie.
|
||||||
|
|
||||||
Nonostante non abbia controllo totale \`e comunque mia responsabilità fare stime orarie sul lavoro da svolgere nonché
|
Nonostante non abbia controllo totale \`e comunque mia responsabilità fare
|
||||||
definire passi e \textit{milestone} per i vari progetti.
|
stime orarie sul lavoro da svolgere nonché definire passi e \textit{milestone}
|
||||||
|
per i vari progetti.
|
||||||
|
|
||||||
Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile} ho coordinato momenti di formazione ad alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso.
|
Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile}
|
||||||
|
ho coordinato momenti di formazione ad alcuni dipendenti nei quali ho mostrato
|
||||||
|
il principale funzionamento delle tecnologie che uso.
|
||||||
\end{it}
|
\end{it}
|
||||||
\begin{en}
|
\begin{en}
|
||||||
\section{Projects management}
|
\section{Projects management}
|
||||||
|
@ -145,23 +154,29 @@
|
||||||
\begin{it}
|
\begin{it}
|
||||||
\section{Il progetto principale: \textit{InteGRa Mobile}}
|
\section{Il progetto principale: \textit{InteGRa Mobile}}
|
||||||
|
|
||||||
Questa applicazione, una volta completata, dovrebbe permettere ad utenti in mobilità di interfacciarsi con alcune
|
Questa applicazione, una volta completata, dovrebbe permettere ad utenti in
|
||||||
funzioni del prodotto ERP di punta di Agomir: il gestionale
|
mobilità di interfacciarsi con alcune funzioni del prodotto ERP di punta di
|
||||||
\textit{InteGRa}\footnote{Sito internet di InteGRa ERP: \url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere alle seguenti sezioni:
|
Agomir: il gestionale \textit{InteGRa}\footnote{Sito internet di InteGRa ERP:
|
||||||
|
\url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere
|
||||||
|
alle seguenti sezioni:
|
||||||
|
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[Ordini cliente] per registrare ordini di prodotti a clienti;
|
\item[Ordini cliente] per registrare ordini di prodotti a clienti;
|
||||||
\item[Soggetti] per consultare informazioni anagrafiche di clienti e fornitori;
|
\item[Soggetti] per consultare informazioni anagrafiche di clienti e fornitori;
|
||||||
\item[Agenda] per consultare e aggiungere eventi nel calendario presente nell'ERP, il quale si pu\`o integrare con \textit{Outlook};
|
\item[Agenda] per consultare e aggiungere eventi nel calendario presente
|
||||||
\item[Magazzini] gestire e inventariare scorte in magazzino.
|
nell'ERP, il quale si pu\`o integrare con \textit{Outlook};
|
||||||
|
\item[Magazzini] gestire e inventariare scorte in magazzino.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
In aggiunta, sarà possibile anche registrare le ore per interventi in trasferta, funzione gi\`a implementata
|
In aggiunta, sarà possibile anche registrare le ore per interventi in
|
||||||
nell'applicazione \textit{InteGRa.Service}, sviluppata nei periodi di alternanza precedenti. Tale lavoro non \`e
|
trasferta, funzione gi\`a implementata nell'applicazione
|
||||||
direttamente implementabile in \textit{InteGRa Mobile} a causa di differenze consistenti nelle architetture dei due prodotti.
|
\textit{InteGRa.Service}, sviluppata nei periodi di alternanza precedenti.
|
||||||
|
Tale lavoro non \`e direttamente implementabile in \textit{InteGRa Mobile} a
|
||||||
|
causa di differenze consistenti nelle architetture dei due prodotti.
|
||||||
|
|
||||||
Inoltre, l'applicazione sarà in grado di funzionare in modo limitato anche senza connessione diretta ad
|
Inoltre, l'applicazione sarà in grado di funzionare in modo limitato anche
|
||||||
\textit{InteGRa}, permettendo la sincronizzazione dei dati modificati con il gestionale in un momento futuro.
|
senza connessione diretta ad \textit{InteGRa}, permettendo la sincronizzazione
|
||||||
|
dei dati modificati con il gestionale in un momento futuro.
|
||||||
\end{it}
|
\end{it}
|
||||||
\begin{en}
|
\begin{en}
|
||||||
\section{The main project: \textit{InteGRa Mobile}}
|
\section{The main project: \textit{InteGRa Mobile}}
|
||||||
|
@ -202,8 +217,8 @@
|
||||||
server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario.
|
server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario.
|
||||||
|
|
||||||
\item Tale componente è una Java WebApplication che utilizza una libreria
|
\item Tale componente è una Java WebApplication che utilizza una libreria
|
||||||
sviluppata internamente (chiamata \textit{restaurant}) per offrire le
|
sviluppata internamente (chiamata \textit{restaurant}) per offrire le rotte
|
||||||
servlet accessibili al client e per interagire con il database di
|
accessibili al client e per interagire con il database di
|
||||||
\textit{InteGRa}, una normale istanza di \textit{PostgreSQL}.
|
\textit{InteGRa}, una normale istanza di \textit{PostgreSQL}.
|
||||||
|
|
||||||
\item Nella fase di comunicazione tramite HTTP, i dati in input vengono
|
\item Nella fase di comunicazione tramite HTTP, i dati in input vengono
|
||||||
|
@ -225,8 +240,7 @@
|
||||||
in grado di gestire (in modo limitato) operazioni eseguite in mancanza di
|
in grado di gestire (in modo limitato) operazioni eseguite in mancanza di
|
||||||
connessione alla rete.
|
connessione alla rete.
|
||||||
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\end{it}
|
\end{it}
|
||||||
\begin{en}
|
\begin{en}
|
||||||
\blindtext
|
\blindtext
|
||||||
|
@ -234,7 +248,44 @@
|
||||||
|
|
||||||
\begin{it}
|
\begin{it}
|
||||||
\subsubsection{\textit{restaurant} -- lato server}
|
\subsubsection{\textit{restaurant} -- lato server}
|
||||||
\begin{lstlisting}[caption=Interfaccia della classe \textit{JsonProducer}, label=jsonprd-java, language=Java]
|
La libreria \textit{restaurant}\footnote{Il nome \textit{restaurant} è un
|
||||||
|
gioco di parole sull'acronimo REST.} viene importata
|
||||||
|
come una normale dipendenza Maven \cite{maven:website}. Essa dipende da:
|
||||||
|
\begin{description}
|
||||||
|
\item[Hibernate ORM] un famoso Object/Relation Mapper \cite{wiki:orm} per
|
||||||
|
Java, utile ad interrogare il database \textit{PostgreSQL} con facilità;
|
||||||
|
\item[GSON] una libreria di Google per serializzare e deserializzare oggetti
|
||||||
|
Java in JSON;
|
||||||
|
\item[Jersey] un'implementazione dell'API JAX-RS per realizzare gli endpoint
|
||||||
|
REST. Ciò avviene senza servlet ma tramite semplici
|
||||||
|
metodi contenuti in classi senza ``padre'' dette \textit{controller},
|
||||||
|
opportunamente decorati con le annotazioni nel package
|
||||||
|
\texttt{javax.ws.rs}.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
Le operazioni richieste per interrogare la base di dati sono ulteriormente
|
||||||
|
semplificate dal codice contenuto in \textit{restaurant} su due livelli:
|
||||||
|
\begin{itemize}
|
||||||
|
\item È possibile eseguire normali operazioni di CRUD \cite{wiki:crud}
|
||||||
|
nonchè costruire manualmente query tramite i metodi statici della classe
|
||||||
|
\textit{CRUDUtils}, che lavorano in input e in output con istanze delle
|
||||||
|
classi ``entità'';
|
||||||
|
\item Inoltre, è possibile creare nuovi \textit{controller} con facilità
|
||||||
|
ereditando dalle classi astratte \textit{JsonProducer} (per
|
||||||
|
implementare funzioni al di fuori di CRUD),
|
||||||
|
\textit{ReadableRESTController} (per implementare operazioni in sola
|
||||||
|
lettura, equivalenti alla ``Read'' in CRUD) e \textit{CRUDRESTController}
|
||||||
|
(per implementare CRUD completi), che offono
|
||||||
|
metodi in grado di generare autonomamente risposte in JSON, sia in caso
|
||||||
|
di successo che in errore.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Seguono le interfaccie delle classi \textit{CRUDUtils}, \textit{JsonProducer},
|
||||||
|
\textit{ReadableRESTController} e \textit{CRUDRESTController}, complete di
|
||||||
|
Javadoc.
|
||||||
|
\end{it}
|
||||||
|
|
||||||
|
\begin{lstlisting}[caption=Interfaccia della classe \textit{JsonProducer}, label={lst:jsonprd-java}, language=Java]
|
||||||
/**
|
/**
|
||||||
* Something that generates JSON responses
|
* Something that generates JSON responses
|
||||||
*/
|
*/
|
||||||
|
@ -242,7 +293,7 @@ public abstract class JsonProducer {
|
||||||
|
|
||||||
protected static final Logger log = %*\ldots*);
|
protected static final Logger log = %*\ldots*);
|
||||||
|
|
||||||
protected static final Gson GSON;
|
protected static final Gson GSON = %*\ldots*);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a json response with status 200 containing an object
|
* Generates a json response with status 200 containing an object
|
||||||
|
@ -288,7 +339,14 @@ public abstract class JsonProducer {
|
||||||
protected Response require(Object s, String propName) { %*\ldots*) }
|
protected Response require(Object s, String propName) { %*\ldots*) }
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
\begin{lstlisting}[caption=Interfaccia della classe \textit{ReadableRESTController}, label=rdbrest-java, language=Java]
|
\begin{it}
|
||||||
|
Per una migliore lettura del listato \ref{lst:jsonprd-java}, si precisa che la
|
||||||
|
classe \textit{Error} è una enumerazione Java contenente messaggi di errore
|
||||||
|
standard. La classe \textit{ErrorDetails}, invece, permette al codice esterno
|
||||||
|
di realizzare messaggi di errore personalizzati.
|
||||||
|
\end{it}
|
||||||
|
|
||||||
|
\begin{lstlisting}[caption=Interfaccia della classe \textit{ReadableRESTController}, label={lst:rdbrest-java}, language=Java]
|
||||||
/**
|
/**
|
||||||
* A REST Controller only readable
|
* A REST Controller only readable
|
||||||
* @param <T> The readable entity class
|
* @param <T> The readable entity class
|
||||||
|
@ -372,7 +430,16 @@ public abstract class ReadableRESTController<T extends Readable,
|
||||||
protected Response existing(InputStream requestBody) { %*\ldots*) }
|
protected Response existing(InputStream requestBody) { %*\ldots*) }
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
\begin{lstlisting}[caption=Interfaccia della classe \textit{CRUDRESTController}, label=crudrest-java, language=Java]
|
\begin{it}
|
||||||
|
Anche il listato \ref{lst:rdbrest-java} necessita di una breve spiegazione.
|
||||||
|
La classe astratta \textit{Readable}, vincolo sul primo parametro generico della classe,
|
||||||
|
è il padre di ogni classe ``entità'', mentre \textit{PrimaryKey<T>} è il padre
|
||||||
|
della classe contenente la chiave primaria di \textit{T}. Un'istanza della
|
||||||
|
classe figlia di \textit{PrimaryKey<T>} è contenuta come attributo nella
|
||||||
|
classe ``entità'' \textit{T}, che a sua volta estende \textit{Readable}.
|
||||||
|
\end{it}
|
||||||
|
|
||||||
|
\begin{lstlisting}[caption=Interfaccia della classe \textit{CRUDRESTController}, label={crudrest-java}, language=Java]
|
||||||
/**
|
/**
|
||||||
* A REST Controller readable and writable
|
* A REST Controller readable and writable
|
||||||
* @param <T> The readable and writable entity class
|
* @param <T> The readable and writable entity class
|
||||||
|
@ -434,6 +501,12 @@ public abstract class CRUDRESTController<T extends CRUDable, U extends
|
||||||
%*\ldots*)
|
%*\ldots*)
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\begin{it}
|
||||||
|
Oltre a quanto mostrato, \textit{restaurant} contiene vari metodi utilità per
|
||||||
|
la gestione di file \texttt{.properties}, per la validazione dei dati in
|
||||||
|
input, per la registrazione della \textit{timestamp} di creazione o modifica
|
||||||
|
di un record, e altro ancora.
|
||||||
\end{it}
|
\end{it}
|
||||||
|
|
||||||
\begin{it}
|
\begin{it}
|
||||||
|
@ -568,7 +641,7 @@ per \textit{InteGRa Mobile}.
|
||||||
\label{fig:argosarch}
|
\label{fig:argosarch}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\textit{Guac Remote} è basata su un'applicativo e libreria per la connessione a computer remoto chiamato \textit{Apache Guacamole}\footnote{\textit{Apache Guacamole}: \url{https://guacamole.apache.org}}.
|
\textit{Guac Remote} è basata su un'applicativo e libreria per la connessione a computer remoto chiamato \textit{Apache Guacamole}\cite{guacamole:website}.
|
||||||
Tale software è costituito da due parti: \cite{guacdoc:arch}
|
Tale software è costituito da due parti: \cite{guacdoc:arch}
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[\textit{guacamole-server} (o \textit{guacd})] un servizio scritto in C che funge da adattatore tra il protocollo \textit{guacamole} e i protocolli VNC, RDP o SSH, utilizzando questi ultimi per stabilire connessioni con gli host remoti;
|
\item[\textit{guacamole-server} (o \textit{guacd})] un servizio scritto in C che funge da adattatore tra il protocollo \textit{guacamole} e i protocolli VNC, RDP o SSH, utilizzando questi ultimi per stabilire connessioni con gli host remoti;
|
||||||
|
|
Reference in a new issue