Post

HttpComponents - Invocazione di una Servlet da un Client Java

DOMANDA: Posso invocare una servlet da un client Java? RISPOSTA: E' possibile stabilire una connessione con un endpoint attraverso le famose API del framework  HttpClient . Purtroppo, come si può notare dalla seguente frase riportata nella home page ufficiale della libreria "The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the  Apache HttpComponents  project " HttpClient è stato sostituito da HttpComponents . Per garantire vita lunga al nostro software, in questo post descriveremo un esempio di utilizzo proprio utilizzando la nuova libreria HttpComponents per eseguire una richiesta POST verso una Servlet . Innanzitutto eseguiamo il download dei jar di HttpComponents dal link HttpComponents v4.3 .  Apriamo quindi Eclipse, creiamo un nuovo progetto Java e, prima di scrivere codice, aggiungiamo al build path i jar appena scaricati. Creiamo la classe MyHttpClient : import java.io.IOException

Recuperare programmaticamente i campi di un oggetto

DOMANDA: Come posso recuperare tutti i campi di un oggetto programmaticamente? RISPOSTA: Per recuperare tutti gli attributi/campi di un oggetto è sufficiente usare la Reflection di Java con un po' di ricorsione.  Definiamo una classe User con delle proprietà: package lancill.objectfields.pojo; import java.util.List; public class User extends Person{ private String mail; private String userid; private List<String> contacts; private List<User> friends; public User(){} public User(String name){ super(name); } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public List<String> getContacts() { return contacts; } public void setContacts(List<String> contacts) { this.contacts = contacts; } public List<User> getFriends() { return friends; } p

Come definire e utilizzare a runtime delle custom Annotation

DOMANDA: Come si definiscono delle Annotation custom per utilizzarle nel mio programma? RISPOSTA: Le Annotation introdotte in Java 5 consentono di definire dei metadata per tre diversi livelli di scoping : SOURCE - Annotation disponibile solo nello scope del sorgente e viene ignorato dal compilatore CLASS - Annotation disponibile nello scope dal compilatore in fase di compilazione, ma viene ignorata dalla Java Virtual Machine (JVM) RUNTIME - Annotation disponibile nello scope della JVM in modo che possa essere utilizzato da l'ambiente di runtime Le Annotation NON aggiungono logica all'applicazione e non sono uno strumento per programmare componenti. Sono invece in grado di fornire delle informazioni (metadati) per capire meglio il tipo di codice che stiamo eseguendo ed eventualmente intraprendere delle azioni o eseguire delle configurazioni ). In questo post ci concentreremo sulle Annotation di tipo RUNTIME per riuscire ad eseguire delle azioni durante l'esec

Abilitazione Cross Application Scope in Tomcat per condivisione dati tra webapp

DOMANDA: Come posso condividere dati tra diverse webapp utilizzando l'Application Scope? RISPOSTA: Di default l' Application Scope è utilizzato per memorizzare oggetti a livello di web application. Questo livello di scope è il più alto rispetto ai classici scope di Request e Session Nome Scope Durata Request Singola richiesta, verso il server Fino a quando la risposta non viene inviata al client Session Tutte le richieste inviate dallo stesso browser Fino a quando non scade il timeout della sessione o l'ID di sessione non viene invalidato (ad es. chiusura del browser) Application Tutte le richieste inviate a una stessa Web Application Container Per poter recuperare un oggetto memorizzato a livello di Application Scope è necessario utilizzare il ServletContext . Se vogliamo recuperare un oggetto memorizzato nell'Application Scope della WebAppA dalla WebAppB è necessario fare attenzione ai seguenti

La ricorsione in Java

Immagine
DOMANDA: Che cos'è la ricorsione? RISPOSTA: La ricorsione è forse una delle prime cose che si studiano in programmazione e, diciamoci la verità, non è così intuitiva per chi è alle prime armi. A cosa serve la ricorsione ? A creare dei cicli (o chiamate cicliche) in maniera alternativa al classico for. In questo post cerchiamo di semplificarne il concetto utilizzando Java, ma è praticamente uguale in tutti i linguaggi di programmazione. Guardiamo subito un esempio a scopo puramente didattico: package ricorsione; public class RicorsioneTest { public static void main(String[] args) { int variabile = metodoRicorsivo(); } public static int metodoRicorsivo(){ return metodoRicorsivo(); } } Cosa succede eseguendo questo frammento di codice? Innanzitutto  sconsiglio di eseguirlo dato che sarà un'inconclusiva Exception a Runtime ( java.lang.StackOverflowErrorloop )! In pratica l'unica riga di codice del main richiama un metodo che richiama se stess

Realizzare un servizio REST con JAX-RS 2.0 e Jersey 2.0

DOMANDA: Come realizzo un servizio REST 2.0 e un client per testarlo? RISPOSTA: Per addentrarsi nel mondo REST consiglio di leggere il post REST 2.0: Definizione e configurazione con il framework Jersey . Il post spiega brevemente i concetti REST e cosa occorre per configurare un ambiente che lo utilizzi. La lettura servirà anche per conoscere quali sono i jar da includere nei progetti che stiamo per realizzare. In questo post creeremo un Servizio REST  che risponderà, con un semplice "echo", alle richieste di un Client. Partiamo con la programmazione del Servizio. Creiamo un nuovo Dynamic Web Project in Eclipse denominato RESTfulService e ricordiamoci di selezionare, nell'ultimo step del wizard, di creazione la checkbox " Generate web.xml deployment descriptor ".  Questa opzione ci permetterà di avere a disposizione un web.xml di base creato da Eclipse da modificare secondo le nostre preferenze (ovviamente non è un passo obbligatorio, ma di sicur

REST 2.0: Definizione e configurazione con il framework Jersey

DOMANDA: Cos'è REST e come configurare un ambiente per utilizzarlo? RISPOSTA: REST ( RE presentational S tate T ransfer ) è un paradigma per la definizione di architetture distribuite.  I suoi principi si basano sulla leggerezza e sull'utilizzo dei metodi offerti dal protocollo HTTP : Ogni entità/operazione viene rappresentata come una Risorsa Per l'invocazione si utilizzano i metodi HTTP  (GET,PUT,POST,DELETE) La rappresentazione dei dati è snella (es. JSON ) REST non è un concetto nuovo: un sito web rispetta i principi REST, cosi come un feed RSS. Di recente si sta estendendo il concetto REST alle architetture orientate ai servizi, oggi principalmente basate su HTTP/SOAP. Una funzionalità/servizio che rispetta i principi REST è denominata  RESTful . In Java esiste la specifica JAX-RS (JSR-339) che regola l'utilizzo di REST. L'ultima release di JAX-RS è la 1.1 ma è in fase di approvazione la versione 2.0 che introduce migliorame