Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Lock Database Java

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67

    Lock Database Java

    Salve ragazzi,

    ho un problema con un'applicazione java che ho realizzato. Sfrutto database HSQLDB.

    L'applicazione prevede l'utilizzo in simultanea di più postazioni, per motivi banali non utilizzo in ogni caso mutex e protezioni varie perchè si faranno "poche" operazioni e comunque non dannose.

    Praticamente avevo installato il programma con il DB nel server locale e funziona tutto senza problemi.

    Adesso ho la necessità di tenere solo il DB nel server e le istanze del programma devono girare nei singoli client (5 postazioni).

    Quando eseguo lo script di connessione con il path del database cambiato mi da però un errore di questo tipo:

    codice:
    2013-04-18T12:46:41.433+0200 SEVERE could not reopen database 
    
    org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: 
    
    org.hsqldb.persist.LockFile@efa1846e[file X:\192.168.1.10\.......\Database\My_db.lck,
    
     exists=false, locked=false, valid=false, ] method: openRAF reason: 
    
    java.io.FileNotFoundException: X:\192.168.1.10\condivisa\.....\Database\My_db.lck
    
     (Impossibile trovare il percorso specificato)

    A cosa è dovuto questo problema?

    Questa è la stringa di connessione che utilizzo:

    codice:
     String db_file_name_prefix = "X:\\192.168.1.10\\.....\\My_db";
        
    Class.forName("org.hsqldb.jdbcDriver"); 
    
    Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:" + db_file_name_prefix, "user", //username 
    "pass"); //password }
    Non riesco a trovare una soluzione. Chiedo gentilmente aiuto perchè sto impazzendo e qui ci sono problemi seri organizzativi.

    E' il database che non è buono per la multiutenza?

    Posso convertire il tutto con mysql? sempre che questo risolva il problema?
    Vi chiedo gentilmente di aiutarmi, sono nei guai

  2. #2
    Hsqldb come tutti i simil database, ha diverse modalità di utilizzo con le ovvie restrizioni.
    Se utilizzi la modalità "file" cioè ti connetti direttamente ai file del database esso per ovvie ragione non può essere multi-utente.
    Quindi dato che hai un server su cui poter condividere, ti basta su quest'ultimo far partire HSQL come server per poi connetterti dalle postazioni cliente (occhio la stringa di connessione è del tipo jdbc:hsqldb:hsql://ip server)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    Ok grazie, ho trovato la modalità server (Database HSQLDB Engine Server). C'è anche il web server ma non credo c'entri nulla.

    Creerò quindi un file di connessione con l'indirizzo del server se non sbaglio, nel mio caso sarà


    String db_file_name_prefix = "jdbc:hsqldb:hsql://192.168.1.10\\condivisa_su_server\\Directory\\Nome _DB";

    Riguardo al driver di connessione invece occorre lasciare questo?

    Class.forName("org.hsqldb.jdbcDriver");


    e poi vabè, la stringa di connessione credo sia sempre quella

    conn = DriverManager.getConnection( db_file_name_prefix,
    "myuser", //username
    "mypass"); //password


    Per il resto non occorre cambiare nulla?

    Grazie per la risposta

  4. #4
    Nel link che avevo dato c'era tutto quello che ti serviva....
    La stringa di connessione è sbagliata non va indicato in quel modo il nome del database ma deve essere uguale al nome del database che hai specificato quando fai partire il server.
    Es:
    codice:
    Lancio il server
     java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb
    Il server userà come primo database il file "mydb" e gli assegnerà il nome di "xdb"
    Lato client invece avrò
    Class.forName("org.hsqldb.jdbcDriver" );
    Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "user", "password");

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    Francesco sei gentilissimo a rispondermi ma mi sfugge un passaggio.

    Quando dici "fai partire il DB nel server" che intendi?

    Io pensavo di utilizzare il server (un pc che funge da ricovero dati) solo come posto in cui archiviare il DB ed attingere da ogni client.

    Poi prendere il programmino java, metterlo su ogni client con lo script di connessione con l'indirizzo corretto del DB.

    Mi sfugge la dicitura "Lancio il server"

    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb


    Forse sto sbagliando approccio o non faccio qualcosa? perchè questo scriptino di sopra non lo eseguivo e non ne ho mai visti di simili in questo ambito

    Scusatemi per l'ignoranza in materia, è la prima volta che sbatto con questi problemi

  6. #6
    Allora mettiamo i puntini sulle U....
    Quello che vuoi fare, correggimi se sbaglio, è un programma che gira su dei pc (CLIENT) che condividono lo stesso database (SERVER) comunemente detta Architettura CLIENTS -> SERVER.
    Ora il tuo database (Server) lo dovrai far girare su un pc ( pc che funge da ricovero dati) raggiungibile da tutti i client ed è qui che entra in gioco il comando "Lancio il server".
    Quindi le operazioni da fare sono :
    1) sul questo pc (server) lanci quel il comando per avviare HSQL in mode "Server", il database fisico cioè file risiederanno su di esso e non sui client.
    2) i clients si connetteranno ad esso per accedere al database.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    Hai messo i puntini sulle U nel modo corretto.

    Quindi vediamo se riesco a capire una cosa:

    dovrei fare un programmino da installare sul server che esegua questa linea di codice:

    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb

    Questo si deve attivare OGNI volta che un client si connette o lo metto nell'esecuzione automatica del server così quando si avvia/riavvia il server automaticamente parte pure questo?

    per quanto riguarda la sintassi:

    java -cp ../lib/hsqldb.jar ---> eseguo java e dico il path assoluto o in questo caso relativo di dove si trova il file jar

    org.hsqldb.Server ---> non so a cosa serve ma mi fido.

    -database.0 ---> io cosa dovrei scrivere?

    file: mydb ----> metterò il nome del mi DB senza alcuna estenzione

    -dbname.0 xdb ---> non capisco cosa è e cose dovrei scrivere io.



    Scusami se ti sto disturbando, non vorrei approfittarne, sei stato gentile e chiaro come pochi. Grazie

  8. #8
    Originariamente inviato da dinoala
    dovrei fare un programmino da installare sul server che esegua questa linea di codice:
    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb

    Questo si deve attivare OGNI volta che un client si connette o lo metto nell'esecuzione automatica del server così quando si avvia/riavvia il server automaticamente parte pure questo?
    Il server lo devi fare partire una volta sola e ovviamente prima che un client tenti di connettersi (altrimenti riceverai un eccezione sul client). Ps ti basta un file batch da far eseguire all'avvio.
    java -cp ../lib/hsqldb.jar ---> eseguo java e dico il path assoluto o in questo caso relativo di dove si trova il file jar
    Esatto.
    org.hsqldb.Server ---> non so a cosa serve ma mi fido.
    E' la main class che si occuperà di far partire il database server.
    -database.0 ---> io cosa dovrei scrivere?
    Questa opzione permette di configurare i database attivi nel server; ne puoi avere molti. In particolare stai dicendo che i parametri che seguono sono la configurazione del tuo primo database (indice 0 come gli array)
    file: mydb ----> metterò il nome del mi DB senza alcuna estenzione
    e dove vuoi che venga salvato il tuo database. Per esempio :
    c:/MioDatabase/clienti
    ti verrà creato/letto il database (i files) che risiedono all'interno della cartella "MioDatabase" e si riferiscono al database "clienti"
    -dbname.0 xdb ---> non capisco cosa è e cose dovrei scrivere io.
    Questo è l' "ALIAS" che vuoi dare al tuo database in questo caso xdb; questo è il nome che ti servirà sul client per instaurare la connessione.

    Per essere più precisi ti faccio un esempio concreto (sono sotto windows):
    java -cp hsqldb.jar org.hsqldb.Server
    Questo è lo startup di java, gli dici di avviare la classe server e che deve caricare nel classpath il jar hsqldb.jar (è nella stessa directory in cui sto lanciando il comando).
    -database.0 file:"C:\Users\muia\Downloads\hsqldb-2.2.9\hsqldb\database\mydb"
    gli sto dicendo che il mio primo database risiede nel path "C:\Users\muia\Downloads\hsqldb-2.2.9\hsqldb\database\" e ha il nome "mydb"
    -dbname.0 ilMioDatabase
    Assegno l'alias "ilMioDatabase" al primo database (che è quello che ho appena configurato).

    Lato client per instaurare una connessione dovrò specificare questo url:
    Supponendo che l'ip del server sia 192.168.2.1
    "jdbc:hsqldb:hsql://192.168.2.1/ilMioDatabase"

    Più di questo nin'so....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.