lundi 25 mars 2013

Création d'un serveur en Java [1/2]

La création d'un serveur java est relativement aisé.
En effet, la JRE met à disposition un ensemble de classe effectuant le plus gros du travail.

La classe java dédier à la partie serveur est ServerSocket. Elle permet d'écouter un port de la machine, puis d'attendre des clients.

Trois méthodes vont être intéressante getInputStream(), getOutputStream(), accept().

La méthode getInputStream() permet de lire les données du client.
La méthode getOutputStream() permet d'écrire au client.
La méthode accept() permet d'attendre l'arrivé de client.

Il est donc nécessaire de :
  1. créer un serveur,
  2. attendre un client,
  3. créer un stream pour la lecture des données client,
  4. créer un stream pour l'écriture vers le client.

Voic un exemple simple d'un serveur Echo qui affiche les données envoyés par le client :
package org.emeric.exemple.echo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

    public static void main(String[] args) throws Exception {
        System.out.println("Demarrage...");
        ServerSocket s = new ServerSocket(4444);
        Socket soc = s.accept();

        // Un BufferedReader permet de lire par ligne.
        BufferedReader plec = new BufferedReader(new InputStreamReader(
                soc.getInputStream()));

        // Un PrintWriter possède toutes les opérations print classiques.
        // En mode auto-flush, le tampon est vidé (flush) à l'appel de println.
        PrintWriter pred = new PrintWriter(new BufferedWriter(
                new OutputStreamWriter(soc.getOutputStream())), true);

        String str = null;

        do {
            // lecture du message
            str = plec.readLine(); 
            // renvoi d'un écho
            pred.println(str); 
        } while (str != null);

        plec.close();
        pred.close();
        soc.close();

        System.out.println("Fin");
    }
}

Ce serveur est très basique car il n'accepte qu'un client.
Dans la prochain étape, ce serveur sera multi-threadé pour accèter plusieurs clients.

lundi 11 mars 2013

Fusion bus JMX de la JVM et JBoss

La technologie JMX dans un environnement Java, est une API qui permet de gérer une application en cours d'éxécution.

Cette API est disponible au niveau JVM. On parle du bus JMX de la JVM.
On peut voir ce bus via la jConsole.

Le serveur d'application JBoss embarque son propre serveur JMX. De ce fait, les informations publiées par défaut sur le bus JMX au sein de JBoss, ne sont pas visibles sur le bus JMX de la JVM.

Depuis JBoss 4.0.3, il est possible de les rassembler, en ajoutant les options suivantes :
# Intégrer JMX de JBoss 4 et de JVM (à partir de JBoss 4.0.3)
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"

# Intégrer JMX de JBoss 5 et de JVM
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
Source : JTips

lundi 4 mars 2013

Ajouter un propriété dynamiquement dans un plugin maven

Il peut être parfois utile dans un plugin maven, développé par vos soins, d'ajouter des properties qui pourront être ensuite utilisée dans le pom.xml.

Pour ce faire, rien de bien compliqué.
Il est nécessaire de récupérer l'objet projet de Maven et d'ajouter un propriété :
// injection de l'objet project
/** @parameter default-value="${project}" */
private org.apache.maven.project.MavenProject project ;

// et dans la méthode execute(), ajouter :
project.getProperties().setProperty("maPropriete", maValeur) ;