mardi 29 septembre 2009

Comment récupérer le statut de plusieurs instances Jonas sous Linux ?

Je ne travaille pas sur Jonas mais je me dois de récupérer le statut d'une instance Jonas (toujours pour du monitoring zabbix). Donc ce que je fais naturellement c'est de lancer /etc/init.d/jonas status sur une Redhat 4 Enterprise. J'ai une réponse comme quoi le process ne tourne pas et pourtant en lançant un ps, je vois bel et bien le process jonas.

Je me renseigne auprès de mes collègues et me rend compte que s'il y a plusieurs instances, il faut préciser sur quel environnement on travaille.

Donc, la procédure à suivre est la suivante :
1. lancer un ps aux | grep jonas
2. récupérer les informations figurant après le = de -Djonas.base=/chemin_vers_la_config
3. positionner la variable d'environnement $JONAS_BASE :
export JONAS_BASE=/chemin_vers_la_config
4. Récupérer le statut de l'instance jonas concernée
/etc/init.d/jonas status

Répétez les étapes 3 et 4 autant de fois que vous avez d'instances. Ensuite automatisez ces étapes en intégrant ces lignes de commandes dans un script shell que vous lancerez via un cron ou via une application de supervision (zabbix, nagios, ...).

A vous de jouer maintenant.


Documentation Jonas

Posté par fatihaelh - - JAVA - Commentaires [0] - Rétroliens [0] - Permalien [#]


mercredi 28 juillet 2004

Les threads en java

Définition d'un thread :
Un thread n'est pas un processus, c'est une tâche. En effet, les threads se partagent la mémoire. Ils ne s'exécutent pas réellement en parallèle (sauf dans le cas où il y a plusieurs processeurs) mais ils se partagent le temps d'exécution.

Cas d'utilisation :
- les programmes avec une interface graphique, ils ont un thread séparé pour le traitement.
- les horloges, les alarmes utilisent des threads
- les programmes en interaction avec l'utilisateur, il est nécessaire dans ce cas de rendre les entrées/sorties non bloquantes

Cycle de vie d'un thread
Un thread a quatre états différents qui définissent son cycle de vie : état nouveau, état exécutable, état en attente, état mort.
Etat nouveau
: le thread prend cet état après son instanciation avec l'opérateur new.
Etat exécutable
: le thread prend cet état quand il est lancé par la méthode start()
Etat en attente
: il n'exécute aucun traitement et il ne consomme aucune ressource, il est bloqué et ce pour diverses raisons, par exemple après appel de la méthode sleep ou de la méthode wait.
Etat mort
: le thread prend cet état quand il est sorti de la méthode run()

Méthodes :
Interface Runnable

Méthode run mise à notre disposition par l'interface Runnable, cette méthode ne prend aucun paramètre en entrée et ne renvoie aucune valeur :
class MonThread implements Runnable{
public
void run(){  //mettre le code }
}

Classe Thread
Notre classe doit être dérivée de la classe Thread.

public class MonThread extends Thread {
public void run() { // mettre du code }}

Le code à exécuter doit être placé dans la méthode run() vue précédemment. L'exécution de ce tread se fait en appelant la méthode start(). Documentation détaillée sur la classe Thread

Notions avancées

  • Synchronisation des threads, elle est indispensable lorsque les threads accèdent à des données partagées, cela permet l'intégrité des données. Il faut ainsi utiliser le mot clé synchronized. Il existe deux types de verrouillages ou moniteurs qui garantissent l'intégrité des objets : les moniteurs d'objet et les monieteurs de classe.

Pour en savoir plus :

Posté par fatihaelh - - JAVA - Commentaires [0] - Rétroliens [0] - Permalien [#]

dimanche 25 juillet 2004

Programmation JAVA

Introduction à la programmation orientée objet :
Une classe est un type de données abstrait qui regroupe un ensemble d'objets ayant des caractéristiques communes et un ensemble de comportements (fonctionnalités). Tout objet possède une identité, des caractéristiques (attributs) et un comportement (état). Un objet est une instance d'une classe. Ex : objet souris appartient à la classe animal.
On identifie deux types d'attributs : attributs de classe et attributs d'instance et deux types de méthodes : méthodes de classe et méthodes d'instance. Ainsi deux phases sont nécessaires pour créer un objet à partir d'un constructeur :
1. allocation mémoire (au niveau de la classe)
2. initialisation des attributs d'instance (au niveau de l'objet)

Une classe peut être public, protected ou private. Elle peut aussi être abstraite (sans attributs) ou concrète.

Création d'une classe :
La création d'une classe se fait avec le mot clé class, par convention la 1ère lettre d'une classe est en majuscule. On y déclare des attributs de classe, ce sont des variables visibles par toutes les méthodes de la classe.
class MaClasse {
//définition des données membres de la classe
//définition d'un objet de type Chaîne de caractères
S tring nom1;
//déclaration d'un objet d'une autre classe
ClasseExterne nom2;
}
 

Création d'une méthode
Les éléments fondamentaux d'une méthode (opération susceptible d'être effectuée par une classe) sont :
- le nom,
- les paramètres,

- le type de retour, void si elle ne retourne aucune valeur
- le corps de la méthode.

Syntaxe :

returnType methodName (/*liste de paramètres : type + nom*/){

//corps de la méthode

return +/- valeur de retour;

}

 

Appel de la méthode :

Objectname.methodName(/*liste des arguments*/);

 

Il est possible de surcharger une méthode c'est-à-dire de définir deux méthodes de même nom mais avec des paramètres différents. Par contre il est impossible de différencier deux méthodes uniquement avec leur valeur de retour.

 

Exemple incomplet issu de http://java.sun.com/j2se/1.4.2/docs/api/ pour la classe Time:

 

 

Method Summary
int getDate()
          Deprecated.
int getYear()
          Deprecated.
void setTime(long time)
          Sets a Time object using a milliseconds time value.
S tring toS tring()
          Formats a time in JDBC time escape format

Les constructeurs et la création d'objet :

Un constructeur porte le même nom que la classe dans laquelle il est défini. Si une classe est crée sans constructeur, le compilateur crée automatiquement un constructeur par défaut.
Exemple de constructeur :

MaDate (S tring jour, S tring mois, S tring annee){
this.jour = jour;
this.mois = mois;
this.annee = annee;
}


Exemple de création d'objet :

Aujourdhui MaDate = new ("02","juillet","2004"); 

A chaque création d'objet, le constructeur en question est appelé. On peut définir plusieurs constructeurs par classe avec plus ou moins de paramètres.

Exemple incomplet issu de http://java.sun.com/j2se/1.4.2/docs/api/ pour la classe URL :

Constructor Summary
URL(S tring spec)
          Creates a URL object from the S tring representation.
URL(S tring protocol, S tring host, int port, S tring file)
          Creates a URL object from the specified protocol, host, port number, and file.
URL(URL context, S tring spec)
          Creates a URL by parsing the given spec within a specified context.


Les méthodes et données statiques
La méthode statique que nous connaissons tous est la méthode main(), elle existe indépendamment de toute classe. Le mot clé static peut être utilisé pour une donnée ou pour une méthode, cela veut dire que la donnée ou la méthode n'est pas rattachée spécifiquement à une classe. Une méthode statique ne peut utiliser que des données déclarées comme étant statiques.

static int variable = 45;
public static void main (S tring[] args){/*corps de la méthode*/}

Le mot clé This
Utilisé seul, This est une référence sur l'objet courant, objet pour lequel une méthode a été appelée. Il est couramment utilisé en association avec return. This (/*liste de paramètres*/) appelle un constructeur depuis un autre constructeur.

Encapsulation
On en vient naturellement à la notion d'encapsulation. Un objet rassemble en lui même ses données (les attributs) et le code capable d'agir dessus (les méthodes). Une interface précise les opérations que l'on peut effectuer sur un objet et l'implémentation désigne le code sous-jacent invisible à l'utilisateur pour réaliser les opérations en question : abstraction de données et abstraction procédurale.

Héritage
Il est possible de construire une classe dérivée (héritée, enfant, sous-classe) à partir d'une classe parent  (classe de base, superclasse), c'est ce qu'on appelle l'héritage. Cette classe dérivée a les mêmes propriétés que la classe de base, à cela s'ajoute des fonctions spécialisées propres à la classe dérivée. Ex : la classe cercle peut dériver de la classe ObjetGraphique et peut avoir des attributs supplémentaires, ex : attribut rayon.
class Classe_fille extends Classe_mere { ... }

Plusieurs avantages découlent de l'héritage : diminution de la taille du code, rapidité de développement, programmation différentielle...
Il faut rappeler qu'en java contrairement au C++, il n'y a pas d'héritage multiple. Pour simuler l'héritage multiple en java, on utilise le concept d'interface. Final est utilisé pour éviter à une classe d'avoir des classes dérivées.

public final class Nom_classe
Super est utilisé pour l'appel des méthodes ou des variables de la classe mère, en particulier dans l'appel des constructeurs de la classe mère.
super.nomMethode();

Les classes et méthodes abstraites.

Les classes déclarées avec abstract ne peuvent être instanciées. Les classes abstraites contraignent à fournir un bloc d'instructions pour chacune de leurs méthodes abstraites à l'intérieur d'une nouvelle classe dérivée, laquelle pourra être instanciée. Toutes les méthodes d'une classe abstraite peuvent ne pas être abstraites.

Comment définir une méthode abstraite?

abstract void MaMethode();

On ne définit pas le corps de la méthode mais seulement son nom et ses paramètres d'entrée et de sortie.

Exemple

abstract class Forme {
    ...
    public abstract void superficie() ;
    ...
    }
class Carrée extends Forme {
    ...
    public void superficie () { ... }
    ...
}

Pour en savoir plus sur les classes abstraites :
http://www.laltruiste.com/document.php?compteur=2&rep=9&evolution=71 http://www.infini-fr.com/Sciences/Informatique/Langages/Imperatifs/Java/programmationObjet.html http://penserenjava.free.fr


Les interfaces

Une interface est une classe abstraite dont toutes les méthodes sont abstraites. De plus, Java ne permettant pas l'héritage multiple, l'utilisation des interfaces permet de palier à cette carence dans la mesure où une classe peut désormais implémenter plusieurs interfaces.

Pour définir une interface, il faut utiliser le mot clé interface.

interface NomInterface

Afin d'implémenter une ou plusieurs interfaces, utilisez le mot clé implements.

class NomClasse implements NomInterface, ..., NomInterfaceN

Elles ne peuvent implémenter d'autres interfaces. Par contre, elles peuvent hériter de plusieurs autres interfaces.
public interface NomInterface extends AutreInterface, ..., AutreInterface


Agrégation
L'agrégation est une relation entre deux classes du type : « Est composé de ... » ou « Possède … » ou encore « a … ». Ex : Une voiture est composé d'un moteur, de portes, de vitres, …

Polymorphisme
Il permet à une méthode d'adopter plusieurs formes dans des classes différentes.
Il existe trois types de polymorphismes :

  • polymorphisme ad hoc : possibilité d'avoir des fonctions de même nom avec des fonctionnalités similaires mais dans des classes différentes
  • polymorphisme d'héritage : possibilité d'avoir des fonctions de même nom mais avec des paramètres différents (la surcharge)
  • polymorphisme paramétrique : possibilité de redéfinir une méthode dans des classes héritant d'une classe de base, ainsi on pourra dire chien.manger() au lieu de animal.chien.manger() dans le cas d'une classe chien qui dérive d'une classe animal.

Association
Une classe est composée de 15 à 25 élèves, on a une cardinalité 15..25, ce n'est ni une agrégation ni un héritage. En résumé, une agrégation introduit les notion de relations et de cardinalités souvent rencontrées dans les modélisations de bases de données (MERISE).

Exemples de programmes :
Mini-programme java avec interface graphique

Create polls and vote for free. dPolls.com

Posté par fatihaelh - - JAVA - Commentaires [2] - Rétroliens [0] - Permalien [#]

lundi 7 juin 2004

Mes premiers pas en java

 

Je connais absolument rien en java. Ce blog me servira à vous montrer ma progression dans l'apprentissage de ce langage.
Java est un langage orienté objet développé par Sun. Un des avantages de JAVA est qu'il est portable, utilisable sur n'importe quel système d'exploitation.

Mode d'emploi
Téléchargement JDK et éditeur ECLIPSE

Mon premier programme
Pour mon premier programme appelé Hello.java, j'ai utilisé simplement le bloc notes de Windows. Il n'y a pas de fichiers séparés pour la définition et le code de la classe (contrairement au C++). Important : le nom de la classe et le nom du fichier doivent être identiques, il est recommandé de mettre la première lettre en majuscules.

//importer toutes les classes du package des utilitaires java
//java.lang est de son côté automatiquement importé
import java.util.*;
public class Hello {
     //main est la méthode principale de la classe Hello
    //elle est publique et ne renvoie aucune valeur (void)
    //le paramètre de main est un tableau d'objets de type S tring
     public static void main (S tring[] args){
          //déclaration d'un objet de la classe Date
          Date aujourdhui;
         //création d'un objet de la classe Date grâce à l'opérateur new
          aujourdhui = new Date();
         //affichage à l'écran avec la méthode println
         System.out.println("Hello world en java"+ aujourdhui);
    }
}

Ensuite vous compilez le programme :
javac Hello.java

Enfin, vous l'exécutez :
java Hello

Vous obtenez le résultat suivant :

Ma première applet

Qu'est-ce qu'une applet? C'est un mini-programme qui ne tourne que dans un navigateur (côté client), il est téléchargé automatiquement au chargement de la page web, il est activé puis exécute un programme.
Voici ma première applet nommée FirstApplet.class :

//importation des méthodes graphiques de la classe awt
import java.awt.*;
//package nécessaire à la réalisation d'applets, doit être utilisé avec AWT
import java.applet.* ;
public class FirstApplet extends java.applet.Applet {
   //méthode publique de la classe FirstApplet, ne renvoie aucune valeur (void)
   public void init (){
//affichage dans le navigateur de l'étiquette "Hello World"
add(new Label("Hello World"));
   }
}

Ensuite, vous écrivez un petit programme HTML permettant de visualiser l'applet précedente : FirstApplet.htm

Message s'affichant si l'applet n'est pas supportée par le navigateur

Voici le résultat :

Ma première servlet.

J'ai voulu en apprendre plus sur la programmation côté serveur et les servlets. Apparemment pour exécuter des servlets sur mon serveur, il me manque un conteneur de servlets style TOMCAT 
Consultez ce lien en vu de l'installation de Jakarta TomCat sous Windows 
Voici un exemple de code que nous pouvons tester sous TomCat :

import java.io.*;
//package générique indépendant du protocole utilisé
import javax.servlet.*;
//package spécifique du protocole HTTP
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
//HttpServletRequest permet d'encapsuler la requête du client
//HttpServletResponse permet d'envoyer la réponse au client
//2 méthodes peuvent être utilisées doGet et doPost
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException { response.setContentType("text/html");
        //permet d'envoyer du texte au navigateur client
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println("");
        out.println("Salut le Monde!");
        out.println("");
        out.println("");
    }
}

Le résultat est l'affichage de "Salut le Monde!" dans un navigateur web après avoir tapé l'adresse suivante (après installation et démarrage de TomCat): http://localhost:8080/servlets-examples/servlet/HelloWorldExample
Ensuite nous allons tester TomCat avec l'application Eclipse, je vous conseille d'aller voir ce tutoriel très bien fait.
J'ai fait part de mon envie d'apprendre dans des forums (Developpez.com) et je me suis rendue compte qu'il fallait d'abord que je m'initie à la programmation orientée objet.
 

Posté par fatihaelh - - JAVA - Commentaires [2] - Rétroliens [0] - Permalien [#]
« Accueil  1