Archives par mot-clé : Java

Un serveur XMPP : Openfire

Publié dans XMPP | 3 commentaires

Un serveur ? Pour quoi faire ?

Dans un précédent billet où j’ai expliqué les principes d’XMPP, on a vu que dans l’architecture XMPP, pour que deux utilisateurs communiquent entre eux, ils doivent chacun dialoguer avec leur serveur XMPP et ce sont ces serveurs XMPP qui vont s’échanger des messages pour les rediriger ensuite vers leur utilisateur.

Echange XMPP Continuer la lecture

Transformer un projet Eclipse général en un projet Eclipse Android

Publié dans Java | 3 commentaires

Imaginons que vous ayez un projet Eclipse qui soit de type Java ou autre (ou rien du tout), mais que vous savez pertinemment que c’est un projet Android et que vous aimeriez bien l’utiliser en tant que tel (histoire de pouvoir travailler quoi). D’instinct, on voudrait faire un clic droit sur le dossier, puis Configure > …  mais il n’y a rien pour Android. Voici la technique que je mets en oeuvre quand ça m’arrive.

Il faut modifier le fichier .project (ouvrir l’onglet Navigator pour le voir, ou bien aller directement le chercher sous Windows ou autre dans le dossier du projet Eclipse en question) pour qu’il contienne :

Continuer la lecture

Android : main.out.xml:1: error: Error parsing XML: no element found

Publié dans Java | Laisser un commentaire

Tiens, voilà longtemps que je n’avais pas écris un nouveau billet ! Depuis Noël en fait. Qu’importe, me voilà de retour pour un billet sur Android ! Voilà une erreur avec laquelle j’ai dû découdre l’autre jour :

res\layout\main.xml:0: error: Resource entry main is already defined.
res\layout\main.out.xml:0: Originally defined here. ...\workspace\TP-Android\res\layout\main.out.xml:1:
error: Error parsing XML: no element found Error in an XML file: aborting build.

La solution

  • Supprimer le fichier main.out.xml
  • Cliquer sur le fichier de votre Activity principale (pour moi src/package-tp-android/main.java)
  • Relancer l’exécution

Si cela ne fonctionne toujours pas, essayez plutôt :

  • Supprimer le fichier main.out.xml
  • Cleaner le projet (Projet / Clean…) et rafraichir (F5 sur le projet, ou clic droit / Refresh)
  • Relancer l’exécution !

L’explication

Cette erreur est due à la création du fichier main.out.xml qui fait un doublon de nom avec le main.xml et ce fichier est créé si on lance un run à partir du main.xml. Pour éviter l’erreur, il faut donc lancer le run en sélectionnant un fichier Java (de préférence l’Activity principale) et ensuite utiliser l’historique des run.

UTF-8 pour le chinois : il parait que ça marche

Publié dans Java | 2 commentaires

UTF-8
Alors alors, peut-on écrire du chinois avec de l’UTF-8 ? La réponse est : OUI !

Par contre, c’est un chinois simplifié qui ne contient donc pas tous les caractères chinois. Si on ne souhaite pas fricoter avec l’unicode, on peut aussi utiliser son homologue chinois (c’est-à-dire l’équivalent de l’UTF-8 (standard international) version chinoise. Bizarre non ?) : GB18030. Mais la encore, c’est du chinois simplifié. Pour avoir du chinois traditionnel, il faut faire face à Big5 (je trouve que le nom en jette !).

Tout ceci explique pourquoi la classe Locale de Java (qui permet de gérer la langue à utiliser) définit le raccourci : Locale.TRADITIONAL_CHINESE et Locale.SIMPLIFIED_CHINESE.

Pour info, Google.ch utilise l’UTF-8 et après quelques minutes de surf sur des sites chinois (avec une collègue chinoise qui m’a montré tout ça), il y a des sites en UTF-8 et des sites en GB18030.

J’aurai peut-être l’occasion de tester ça d’ici 3 semaines, si c’est le cas je confirmerai ou infirmerai ce billet.

Pour aller plus loin

Documentation et tutoriel Hibernate

Publié dans Java | Un commentaire

Hibernate est un framework utilisé en Java EE permettant de gérer ce que l’on appelle la « persistance des objets » dans une base de données.
En français courant : en Java on travaille sur des objets, on réfléchit avec des objets et en général on souhaite pouvoir stocker quelques uns de ces objets quelque part. Pour se faire, on utilise le plus souvent une base de données et celle-ci est rarement une BDD* objet (car trop compliqué, pas performant et patati et patata) mais plutôt une BDD relationnelle (c’est-à-dire : non objet). Hibernate permet de faire le lien entre Java et la BDD en facilitant les accès via HQL (d’habitude on utilise le SQL pour accéder à une BDD relationnelle, HQL utilise une syntaxe similaire mais manipule des objets), et surtout en faisant en sorte que Java n’ai qu’à traiter des objets. Bref, Hibernate fait gagner un temps fou au développeur, tout en lui permettant de se concentrer d’avantage sur l’essentiel.

J’ai découvert des documentations et des cours Hibernate 2 et Hibernate 3 sur le « site Internet » de M. Masssat, un enseignant-chercheur à Marseille. Je les consulte de temps en temps et c’est du tout bon.

Et M. Massat fournit aussi quelques autres liens vers des infos sur Tomcat, JSP, … : Le coin des docs… Merci à lui et bonne lecture !

Au passage, dans mon bouquin sur Java EE 5, l’auteur parle de JPA. JPA est apparu avec Java EE 5 et a le même rôle qu’Hibernate sauf qu’il est intégré nativement à Java. Les développeurs de Sun se sont inspirés du travail effectué sur Hibernate (ainsi que d’autres frameworks faisant la même chose) et ont standardisé la chose. A ma connaissance, JPA commence à être utilisé de plus en plus massivement, donc à mon avis, ça vaut le coup de s’y intéresser. J’écrirai peut-être un de ces quatre sur Hibernate ou JPA. (ou les deux)

* BDD = Base De Données

Calculer la durée d’un script ou d’un programme Java

Publié dans Java | Laisser un commentaire

Combien de fois vous est-il arriver de chercher à connaître la durée d’un script, d’une action ou d’un morceau de code ? Franchement, ça m’est arrivé relativement souvent, à tel point d’ailleurs que le code de base que j’ai créé pour démarrer un nouveau projet de site Internet en PHP, affiche par défaut en bas de page le temps de chargement.

En Java, il existe une class nommée Timerdans le package com.ge.tools qui permet de calculer facilement la durée d’un script. Deux méthodes sont à utiliser :

  • getTempsTotal : renvoie la durée en milliseconde depuis la déclaration du Timer
  • getTempsIntermediaire : renvoie la durée en milliseconde depuis le dernier appel à getTempsIntermediaire ou à la déclaration du Timer si aucun appel à getTempsIntermediaire effectué précédement

Dans l’exemple ci-dessous, j’utilise en fait getTempsTotalFormate et getTempsIntermediaireFormate qui renvoie la durée au format plus lisible : h:min:s,ms.

Timer timer = new Timer();
System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 1 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 1 : "+timer.getTempsTotalFormate()); System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 2 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 2 : "+timer.getTempsTotalFormate());

Ce qui affiche au bout de 2s :

Sleep 1000ms…
Temps intermédiaire 1 : 0:0:1,0
Temps total 1 : 0:0:1,0
Sleep 1000ms…
Temps intermédiaire 2 : 0:0:1,0
Temps total 2 : 0:0:2,0

Maven Ant et scp

Publié dans Apache | Un commentaire

Ant
Dans la société où j’effectue mon stage actuellement, on utilise Maven. Je ne vais pas détailler maintenant ce « truc » parce que j’en serai bien incapable mais en gros Maven est un projet d’Apache qui fournit : des normes, des méthodes de build automatisées et peut-être d’autres choses. Hum, on va dire ça comme ça !
On utilise Maven avec Ant pour builder, et on peut donc utiliser toutes les commandes d’Ant dans les fichiers de configuration de Maven, enfin en théorie. Une des méthodes que l’on utilise fréquement sous Maven est la méthode deploy. Cette méthode copie les jar générés (oui, oui, je fais du Java !) à l’endroit que l’on a configuré, généralement en utilisant copy d’Ant. Du coup, moi ce qu’on m’a demandé de faire c’est de créer une méthode deployProd qui copie les jar sur le serveur distant de production. L’idée est donc d’utiliser scp (la commande de copie en SSH en shell) et non plus copy. Les problèmes commencent à ce niveau là et sont sûrement dû au fait que je travaille sous Windows et non sous Linux…

Avant de commencer : j’utilise Maven 1 et je crois qu’on utilise une architecture assez bizarre, mais je n’ai pas suffisement d’expérience pour aller plus loin.
Continuer la lecture

Comparer 2 dates en Java avec compareTo, before, after et equals

Publié dans Java | Laisser un commentaire

Java permet aussi de comparer très facilement deux dates entre elles. Pour voir comment cela se passe en vrai, nous allons ré-utiliser les exemples prient pour le billet Transformer une String en Date en Java et vérifier sa validité comme ça on pourra lire facilement les dates.
Pour comparer 2 dates, on peut utiliser compareTo qui a le mérite d’être puissante mais de nécessiter une petite lecture de la doc pour connaître le sens de lecture. Sinon, on peut se limiter à l’utilisation de before et after. Le tout est de bien savoir dans quel sens on travaille.

Pour tous les exemples ci-dessous je réfléchis de la manière suivante : dateAComparer.comparateur(datePasséeEnArgument)
Continuer la lecture

Montre mécanique

Transformer une String en Date en Java et vérifier sa validité

Publié dans Java | 2 commentaires

Dans un précédent billet Petit point sur SimpleDateFormat, on a vu l’utilisation de SimpleDateFormat, et on va que c’était relativement simple. Plusieurs exemples montraient comment utiliser format pour transformer une date en une chaîne de caractère formatée selon notre bon plaisir. Un court exemple présentait la méthode parse qui effectue l’opération inverse : transforme une chaîne de caractère dans un format bien défini, en une date. Le but de ce billet est d’aller un peu plus loin avec parse pour voir comment il est possible de gérer les différents cas d’erreurs.

Prenons un premier exemple. Définissons un format de date : dd/MM/yyyy. Aujourd’hui nous sommes le 1er juillet 2010, par conséquent la date du jour dans le format que l’on vient de définir s’écrie : 01/07/2010. On va donc récupérer une chaîne de caractère et la transformer en date avec parse, puis vérifier que l’on obtient le bon résultat. L’exemple ci-dessous affiche : « Date parsée : Fri Mar 18 00:00:00 CET 1988 ».
Continuer la lecture

Montre mécanique

Petit point sur SimpleDateFormat

Publié dans Java | 2 commentaires

Montre mécaniqueCes derniers temps, il m’est arrivé plusieurs fois de m’amuser avec une date en Java. Ma foi, ce n’est pas particulièrement compliqué, mais il faut avoir compris le principe, bref, ça vaut le coup d’y passer quelques demi heures. Par conséquent, commençons par SimpleDateFormat qui permet d’afficher facilement (puisque c’est simple !) une date comme on le souhaite.
L’idée de base est la suivante :

  • On précise un format de date avec SimpleDateFormat
  • Avec la méthode SimpleDateFormat.format, qui renvoie un String, on parse une date au format souhaité.
  • Ou alors avec la méthode SimpleDateFormat.parse qui renvoie une Date, on parse une String (au format précisé) en une date

Continuer la lecture