salve a tutti, sto affrontando una problematica che secondo me è "comune" a molti, quindi prima di procedere con la mia soluzione volevo chiedere se c'era qualche alternativa più rapida ed efficente.
attualmente uso questa classe
codice:
package gestioneassociatifederimprese;
/*
 *
 * Original post:
 * http://franziale.blogspot.com/2008/1...stanza-di.html
 *
 * how to use this class
 *
 * JustOneLock ua = new JustOneLock("JustOneId"); if (ua.isAppActive()) {
 * System.out.println("Applicazione già in esecuzione. "); }else { // caso in
 * cui si tratta della prima istanza dell'applicazione
 * System.out.println("Applicazione eseguita"); }
 */

import core.MetodiUtilità;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;

public class JustOneLock {

    private String appName;
    private File file;
    private FileChannel channel;
    private FileLock lock;

    public JustOneLock(String appName) {
        this.appName = appName;
    }

    public boolean isAppActive() {
        try {
            file = new File(System.getProperty("user.home"), appName + ".tmp");
            channel = new RandomAccessFile(file, "rw").getChannel();
            try {
                lock = channel.tryLock();
            } catch (OverlappingFileLockException e) {
                // il file è già loccato
                closeLock();
                return true;
            }

            if (lock == null) {
                
                closeLock();
                return true;
            }

            Runtime.getRuntime().addShutdownHook(new Thread() {
                // distrugge il lock quando la JVM viene chiusa

                public void run() {

                    closeLock();
                    deleteFile();
                }
            });
            return false;
        } catch (Exception e) {
            closeLock();
            return true;
        }
    }

    // metodo per chiudere il lock sul file
    private void closeLock() {
        try {
            lock.release();
        } catch (Exception e) {
        }
        try {
            channel.close();
        } catch (Exception e) {
        }
    }

    // metodo per cancellare il file di lock
    private void deleteFile() {
        try {
            file.delete();
        } catch (Exception e) {
        }
    }
}
per la gestione del lock su un file, per avere un accesso esclusivo in unica istanza all'eseguibile. ora il mio problema è un altro, io vorrei "rimuovere" questo accesso esclusivo trasformandolo in "possibilià di salvataggio esclusiva". cioè il primo che avvia il programma può fare tutto, chi lo avvia in seguito può solo fare la visualizzazione. Avevo pensato di risolvere ciò scrivendo su di un file una variabile boolean che mi indicasse se il file fosse già aperto, in pratica replicando il concetto di lock ma al solo scopo informativo.

Credete che ci siano alternative valide oppure questa è la strada "migliore" da percorrere???