Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

Titolo: Uscita corretta da 4D Server con Stored procedure

Categoria: Codice Ultimo Aggiornamento: 28/01/05


Una stored procedure è un processo lanciato sulla macchina server.

L'utilizzo di questa tecnica è molto spesso indicato perché limita la comunicazione via network fra client e server.
Una stored procedure può essere lanciata:

- da 4D Server, usando il comando New process;

- da 4D Client, usando il comando Execute on server.

Vediamo di usarla per eseguire una corretta uscita da 4D Server.
Nel database method "On Server Startup" inseriamo questo codice:

<>StopServer:=False
<>StoredProc:=New process("Server_Method";32*1024;"StoredProc (server)")

Il metodo "Server_Method" non fa altro che un ciclo molto semplice, che dura finché <>StopServer non diventa "Vero"

Repeat
        $currentTime:=Current time
        
        DELAY PROCESS(Current process;60)
Until (<>StopServer=True)


Ora, esistono due modi, come ben sappiamo di uscire da 4D Server:
- "Disconnect from server in nn min." è sicuramente il più pericoloso: trascorso il numero di minuti TUTTI I PROCESSI VERRANNO CHIUSI, con grosso rischio, ovviamente di integrità del database;
- "Wait for all Users to disconnect" attende che tutti i client vengano chiusi.

Se viene usato questo secondo sistema di chiusura del server, è possibile usare la variabile <>StopServer impostata precedentemente per controllare nelle varie stored procedures se il server sta o meno per chiudersi.

Per fare in modo che 4D Server attenda la conclusione dei vari processi si può usare questo codice nel database method "On Server Shutdown" (dobbiamo controllare tutti i processi possibili del server, quindi anche Web):

  <>StopServer:=True
      
`inizializzo

      $Index:=1
      $nbUsersProcs:=5
      $serverReady:=11
      
      Repeat
          
           ` Quanti processi vivi?
           $nbProcess:=Count user processes
          
           ` Condizione dei processi kernel
           $interface:=ProcessExist (204;1) ` process 'User interface'
           $client:=ProcessExist (204;2) ` process 'Client manager'
           $cache:=ProcessExist (204;3) ` process 'Cache manager'
           $web:=ProcessExist (401;1) ` process 'Web server'
           $index:=ProcessExist (204;4) ` process 'Index manager'
          
           ` Una variabile che condensa gli stati
           $serverReady:=$interface+$client+$cache+$web+$index
          
           ` Delay per 5 secondi
           DELAY PROCESS(Current process;300)
          
      Until (<>StopServer=True) & ($index=0) & ($nbProcess<5) & ($serverReady<11)


Il metodo "ProcessExist" controlla lo stato dei processi kernel accedendo alle risorse:

  ` $1 => STR# number
      ` $2 => STR# item number
      ` $0 <= number

      $0:=Process number(Get indexed string($1;$2))


Così, se $index è uguale a zero, significa che nessun processo di indicizzazione è in corso e il server può uscire.

Un altro approccio potrebbe essere quello di far lanciare un processo al client che controlli lo stato di <>StopServer, in modo che possa completare tutti i suoi processi prima che venga eseguito il comando "Quit 4D"


Inviato da: PierPaolo Sichera Visite: 12300

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
301 utenti registrati

Pagina servita il 19/03/24 alle 07:53:43 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad