Esecuzione univoca di una applicazione java

di il
3 risposte

Esecuzione univoca di una applicazione java

Salve a tutti del forum,
ho fatto una piccola applicazione in java e per motivi tecnici/utilizzo questa applicazione deve comportarsi come un singleton, ossia non devono esserci più copie di questa applicazione lanciate contemporaneamente sul PC.

In passato, sviluppai in VB6, un'applicazione che doveva avere le stesse caratteristiche di cui sopra.
La cosa fu risolta utilizzando una libreria di sistema che restituiva l'elenco dei task in running.
Pertanto l'applicazione, durante l'avvio, verificava se esistevano dei task in esecuzione con il proprio nome e se c'era (in genere uno) terminava se stessa.

Esiste un modo in Java per fare lo stesso?

Grazie a tutti per aver letto, ancor di più se mi rispondete.
cnesan

3 Risposte

  • Re: Esecuzione univoca di una applicazione java

    cnesan ha scritto:


    Esiste un modo in Java per fare lo stesso?
    In generale (non solo riferito a Java) è sufficiente acquisire il controllo su una risorsa del sistema "esclusiva", che sia acquisibile in maniera (possibilmente) "atomica". Ovvero o ce l'hai tu o non ce l'hai tu. E se ce l'hai nessun altro processo può acquisirla nemmeno in un piccolissimo frangente di tempo mentre la stai acquisendo tu.

    In pratica, tipicamente:
    - il lock su un file
    - una porta di networking

    Poi ci possono essere meccanismi "nativi" specifici di un certo S.O. ma qui bisogna vedere.
  • Re: Esecuzione univoca di una applicazione java

    Grazie per aver risposto,

    Ok, qualcosa di simile lo feci quando studiavo ossia: Quando l'applicazione andava in esecuzione, verificava la presenza di un file, se era presente si chiudeva altrimenti lo generava.

    In realtà mi volevo soffermare sulle possibilità di comunicazioni tra le virtual machine di java se ce ne sono.
  • Re: Esecuzione univoca di una applicazione java

    In realtà mi volevo soffermare sulle possibilità di comunicazioni tra le virtual machine di java se ce ne sono.
    Cosa intendi dire?

    Java, come qualunque linguaggio di programmazione, mette a disposizione librerie per la comunicazione TCP/IP e protocolli correlati (nel tuo caso UDP). Ovviamente si possono fare cose anche piu' elaborate

    Ti basta attivare un serverino UDP in ascolto su una certa porta e che invia un messaggino "I am Alive!!!" sulla stessa porta.
    Se scopri che c'e' qualcun altro attivo, ti suicidi

    Il problema potrebbe essere: come definire "l'altro"?
    Con un banale timestamp e l'altro e' quello con la data piu' vecchia

    I vecchi vincono sempre sui giovani

    Non sai cosa e' il protocollo UDP? Il TCP/IP????

    COMPRA LIBRI!
    LASCIA PERDERE il copia/incolla da Internet! STUDIA!
Devi accedere o registrarti per scrivere nel forum
3 risposte