[RCP] Lancer seulement une instance d'une appli
Salut,
Je suis en train de développer une appli qui ne doit être lancer qu'une seule fois à la fois (hum, c'est vachement clair..), sinon, les fichiers sur lesquels elle bosse se trouve modifié par deux applis en meme temps et on perd des données.
Bref, je cherche une solution pour interdire le lancement d'une deuxième application.
Sachant que j'ai déjà trouvé 2 solutions qui ne me satisfont pas :
- créer un fichier au lancement de l'application (et le supprimer à la fermeture), si le fichier est déjà créé, alors l'application est déjà lancée, donc on en lance pas une nouvelle. Cette solution pose un probleme en cas de gros plantage, le fichier ne sera pas effacé, et il deviendra donc impossible de relancer l'application.
- utiliser les sockets, dans le même style que les fichiers (ouverture d'un socket à la place de la création d'un fichier). Cela pose un probleme en cas de firewall trop strict qui empeche l'ouverture de tout socket.
Je me suis dit qu'il y avait peut etre une possibilité de le faire grâce au RCP d'Eclipse. Mais je n'ai pas réussi à trouver.
Si quelqu'un connait la solution, il aura mon entiere gratitude. :D
Merci d'avance.
[RCP] Lancer seulement une instance d'une appli
Regarde comment fait eclipse. Il utilise un mécanisme de ce type pour détecter le lancement d’une autre instance d’eclipse sur ton workspace.
Tout se passe dans la classe org.eclipse.ui.internal.ide.application.IDEApplication.
En gros, eclipse crée un fichier ".lock" dans les metadatas de ton workspace. Mais surtout, il verrouille le fichier (à l’aide de l’API java.io), ce qui fait qu’une autre instance de l’application ne sera pas capable de le créer. De cette manière eclipse détecte que le workspace est déjà utilisé et demande la sélection d’un autre workspace.
En cas de gros plantage, le processus java étant mort, même si il existe encore, le fichier n’est plus verrouillé, on peut donc relancer l’application.
Eclipse fournit une API pour le verrouillage se basant sur l’interface org.eclipse.osgi.service.datalocation.Location.
Je me base sur eclipse 3.3 mais le mécanisme est similaire pour les anciennes versions.
[RCP] Lancer seulement une instance d'une appli
Bonjour,
en dehors du site officiel eclipse.org, l'un des principaux sites d'information et de support est www.eclipsezone.com. Les forums sont directement liés aux newsgroups officiels d'aide et tu communiques directement avec les développeurs des différents projets.
Bonne soirée
[RCP] Lancer seulement une instance d'une appli
Merci encore.
Je me le mets dans mes favoris.