begin process at 2012 02 09 09:17:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > UNE SEULE INSTANCE DE PROGRAMME SANS SOCKET

UNE SEULE INSTANCE DE PROGRAMME SANS SOCKET


 Information sur la source

Note :
Aucune note
Catégorie :Systeme Classé sous :unique, instance, programme, seule Niveau :Débutant Date de création :20/04/2007 Date de mise à jour :20/04/2007 16:24:51 Vu :5 507

Auteur : indiana_jules

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Dans le cadre d'un projet, je devais mettre en place un système multi-agents sur un réseau très sécurisé. Le problème que je rencontrais est que les utilisateurs avaient tendance à lancer plusieurs fois mon programme, ce qui n'est pas terrible. La plupart des solutions proposés pour éviter cela sont soit pas très élégante, soit ont des failles.

Par socket : nous crééons un serveur sur un port particulier. Problèmes : pas très élégant, et sur un réseau sécurisé, n'est pas adéquate
Par verrouillage de fichier : nous faisons un lock sur un fichier en local du programme. Problèmes : lorsque nous n'avons pas les droits d'écritures, ou lorsque le programme est interrompu violemment

Une troisiéme solution consiste de créer en natif un programme palliant cette solution, sauf que je recherchais une solution multiplateforme, et qui ne me demande pas trop de formation (je suis null en C/C++ .. faudrait que je m'y penche un jour ...)

Et j'ai eu une petite idée : accéder au répertoire temporaire du système (où normalement, nous avons toujours le droit d'accès et d'écriture), créer u fichier qui se détruit à la fin du programme. Ainsi, si le fichier n'est pas créé, alors nous pouvons lancer le programme. Sinon, nous devons le stopper. Par contre, si nous l'arrêtons brutalement, il rsique ne plus amrcher :/

Je vous propose donc ma solution. Elle ne résoud pas tous les problèmes lié à ce sujet mais aide quand même pour un très grand nombre de cas :)

Source

  • package perso.device.system;
  • //Import needed packages
  • import java.io.File;
  • import java.io.IOException;
  • import java.security.AccessController;
  • import sun.security.action.GetPropertyAction;
  • /**
  • * <p>Title : UtilitiesSystem</p>
  • * <p>Description : lass device for System</p>
  • * <p>Copyright : Copyright (c) 2007</p>
  • * <p>Society : Perso</p>
  • * @author Indiana_jules
  • * @version 1.0
  • */
  • public class UtilitiesSystem {
  • /**Method detecting if an instance of a program is running
  • * @param name Program's name
  • * @return Return the state
  • * @throws IOException Input/Output error
  • */
  • public static synchronized Boolean isSingletonProgram(String name) throws IOException {
  • Boolean statut = true;
  • GetPropertyAction a = new GetPropertyAction("java.io.tmpdir");
  • String tmpdir = ((String) AccessController.doPrivileged(a));
  • File temporaryFile = new File(tmpdir + "/" + name +".tmp");
  • statut = !temporaryFile.exists();
  • if(statut){
  • temporaryFile.createNewFile();
  • temporaryFile.deleteOnExit();
  • }
  • return statut;
  • }
  • }
package perso.device.system;

//Import needed packages
import java.io.File;
import java.io.IOException;
import java.security.AccessController;

import sun.security.action.GetPropertyAction;

/**
 * <p>Title : UtilitiesSystem</p>
 * <p>Description : lass device for System</p>
 * <p>Copyright : Copyright (c) 2007</p>
 * <p>Society : Perso</p>
 * @author Indiana_jules
 * @version 1.0
 */
public class UtilitiesSystem {
	/**Method detecting if an instance of a program is running
	 * @param name Program's name
	 * @return Return the state
	 * @throws IOException Input/Output error
	 */
	public static synchronized Boolean isSingletonProgram(String name) throws IOException {
		Boolean statut = true;
		GetPropertyAction a = new GetPropertyAction("java.io.tmpdir");
		String tmpdir = ((String) AccessController.doPrivileged(a));
		
		File temporaryFile = new File(tmpdir + "/" + name +".tmp");
		statut = !temporaryFile.exists();
		
		if(statut){
			temporaryFile.createNewFile();
			temporaryFile.deleteOnExit();
		}
		
		return statut;
	}
}



 Historique

20 avril 2007 16:24:51 :
Petite modification dans le texte d'explication

 Sources du même auteur

Source avec Zip JMF ET RTP
Source avec Zip Source avec une capture JTABBEDPANE FERMABLE AVEC GESTION DU DRAG AND DROP
Source avec Zip OBSERVER ET OBSERVABLE EN RMI
Source avec Zip Source avec une capture HEADER POUR LES LIGNES D'UNE JTABLE
LIRE ET ÉCRIRE UN FICHIER BMP

 Sources de la même categorie

Source avec Zip Source avec une capture INVITE DE COMMANDES DOS par Julien39
Source avec Zip TASK_KILLER par COUNDOULIBZO
Source avec Zip HYPERTERMINAL EN JAVA par naf87
Source avec Zip Source avec une capture ZFS GESTION DU BOOTLOADER par 78.ultima
RECHERCHE LDAP AVEC PAGINATION par caiman125

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTIONNAIRE DE CAFÉTÉRIA par magicraky
Source avec Zip INSTANCE UNIQUE D'UN PROGRAMME (SANS SOCKET NI FICHIER) par Chatbour
INSTANCE UNIQUE D'UNE APPLICATION par rom1v
Source avec Zip Source avec une capture GÉNÉRATEUR DE LABYRINTHES ET 3D par raff

Commentaires et avis

Commentaire de Twinuts le 20/04/2007 17:00:15 administrateur CS

Salut,

sympa comme bout de code :P (bien qu'il a plus sa place sur codyx...tu veux bien le mettre dessus stp ?), sinon comme déjà évoqué sur une source du même genre il existe aussi les locks sur un fichier en passant par la méthode getChannel().tryLock() de l'objet RandomAccessFile

Commentaire de indiana_jules le 20/04/2007 17:06:33

Oki je m'en occupe :)

Commentaire de Ombitious_Developper le 20/04/2007 17:27:30

Salut:

Je pense que cette solution présente beaucoup de lacunes.

Commentaire de Twinuts le 20/04/2007 17:55:52 administrateur CS

Salut,

Ombitious_Developper c'est pas le tout de dire ça faudrait penser à développer ton idée ...

Commentaire de sheorogath le 21/04/2007 13:15:38 administrateur CS

ca change un peu des methode static avec une reference de l'instance ...

sinon si pc reboot alors que l'appli tourne le fichier ne seras pas supprime et donc l'appli de redemarreras ce qui peut etre genant si j'ai compris ce qu'a dit twinuts c'est vrai que cree un fichier temporaire et le verrouiller en ecriture serais pas mal ... en cas de caprice du pc au demarrage si le fichier existe mais qu'il est accessible en ecriture tu pourras demarrer l'appli ou si par hasard il te laisse y ecrire dessus essai de le supprimer...

Commentaire de Twinuts le 21/04/2007 13:27:06 administrateur CS

Salut,

ouep et tu peux aussi supprimer le fichier dans un shutdownhook que tu ajoute à l'objet Runtime grâce à la méthode   addShutdownHook de ce dernier (histoire d'être plus propre....

Commentaire de sheorogath le 21/04/2007 13:28:53 administrateur CS

lol je parlais d'un reboot sauvage comme le font parfois certains pc ...
ou alors si tu kill le processus ...

Commentaire de Twinuts le 21/04/2007 13:35:25 administrateur CS

Salut,

idem le seul kill que tu ne peux trapper c'est le kill -9 deunix le reste tu peux...

Commentaire de sheorogath le 21/04/2007 13:38:11 administrateur CS

jl'avais oublié celui la mais bon je trouve ca un peu hasardeux

Commentaire de Twinuts le 21/04/2007 13:42:39 administrateur CS

Salut,

pourquoi hasardeux ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Unique instance de programme [ par indiana_jules ] Salut, j'aimerais pouvoir n'avoir qu'une seule instance de mon programme qui tourne. Existe-t-il un moyen propre de le faire ? (sans passer par un Ser Exemple de programme, un amateur bloqué [ par dimension9 ] bonjourje d&#233;bute en java et la je tombe sur un &#233;nonc&#233; d'un petit programme, j ai essay&#233; de le faire mais je bloque.c'est en r&#233 Compiler et executer un programme à l'interieur d'un programme java [ par auvrayju ] Bonjour,Je travaille actuellement sur un projet. Dans celui ci je modifie et cr&#233;e des fichier . java (Filewriter). J'aurais besoin de compiler et applet dans frame [ par mastermario ] bonjours a tous. J'ai un petit probleme que je pense etre tout bete : je viens de creer une fonction applets qui se rafraichit toutes les secondes e Probleme d'acquisition de la temperature provenant d'une carte TINI (serveur web embarqué)! [ par mastermario ] Salut a vous!! Voila je n'arrive pas a acqu&#233;rir la temperature provenant de ma carte TINI, j'ai d&#233;ja un programme complet (en applet )qui m Transformer un programme java en applet [ par sylsau ] Bonjour, J'ai fait une petit programme JAVA utilisant SWING. Voici un screenshot de ce petit programme : http://www.webmaitrise.com/utilitaire.png Récupération d'une partie d'une table [ par stefpoisson ] Bonjour,J'ai r&#233;alis&#233; un programme java qui interroge une base de donn&#233;es et avec les r&#233;sultats cr&#233;e un fichier texte. Ce prog help [ par enit128 ] bonjour &#224; tous,j'ai r&#233;alis&#233; un petit programme en java dont l'objectif est le tracage d'une courbe pr&#233;sentant des&nbsp; valeurs de integration code C dans un programme java [ par prog_amateur ] salut je recherche une methode permettant d'integrer un code C dans un programme java Pb de récupération d'évenement ! [ par joduak ] Bonjour, Comme le sujet l'indique j'ai un &#233;norme probl&#232;me d'&#233;coute clavier...:p En fait j'ai construit une classe "EcouteClavier" qui


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,761 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales