Newsgroup: it.comp.java
Titolo: Variabili GLOBALI

Come posso fare a dichiarare una variabile come GLOBALE?
Per GLOBALE intendo che qualunque applicazione possa fare riferimento ad
essa ed eventualmente modificarla.
Grazie
  Marco

"Marco C." wrote:

Se per GLOBALE intendi veramente quello che hai detto, devi usare un file
che memorizza il valore della variabile!
Sei sicuro che volevi dire "ogni applicazione" dove per applicazione si
intende "programma indipendente in esecuzione su una particolare macchina" ?

 intende "programma indipendente in esecuzione su una particolare
macchina" ?
Probabilmente intendeva questo...  se si tratta proprio di variabili, mi
pare che l'unico modo sia definire una classe 
p.es
. "Ambiente", dotarla
delle variabili necessarie (
p.es
. public String nomeUtenteCorrente),
istanziarla all'inizio del programma, e passarne il riferimento ad ogni
altra classe del programma che ne puo' avere bisogno per leggerne o
modificarne i valori.
Forse i piu' esperti potrebbero suggerire un metodo migliore (interessa
anche a me)?
Ovviamente la prima cosa da chiedersi, IHMO, sarebbe "ho proprio bisogno di
queste 'variabili globali'"..?


Questo pero' non ti consente di passarla ad "applicazioni" diverse, ma
semplicemente a programmi Java che girano all'interna della stessa VM
(vedi sotto); e' inoltre un metodo molto "statico".
Nel caso di applicazioni mi vengono in mente un po' di altri modi:
a) usare le variabili ambiente di sistema (platform dipendent, pero',
su MAC p.e. non funziona) attraverso le funzioni della classe System (o
Runtime, non ricordo ;-))
b) usare un serverino RMI per mantenere un'hashtable con queste
fantomatiche variabili (consente anche l'utilizzo fra applicazioni su
macchine diverse)
c) farsi una classe che scrive (gestendo opportunamente i lock) su
disco o su DB?
d) farsi una bella DLL nativa? (uh, non mi piace molto...) che scriva
da qualche parte in Winsozz
Ovviamente, se lui intendesse "all'interno di diverse classi che girano
all'interno della stessa VM" la cosa si semplifica. Si potrebbero ad
esempio usare le system properties, accessibili mediante la classe
System e comuni all'interno della stessa VM.
Ciao,
      Bruno.
Sent via Deja.com 
http://www.deja.com/
Before you buy.

anche a me)?
E' sufficiente porle come variabili statiche pubbliche nella classe principale 
APP (applicazione o applet che sia). Dal codice, ci si potra' riferire ad esse 
con la notazione APP.xxxx
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/

 con la notazione APP.xxxx
Che fesso. Chissa' perche' mi ero convinto che si potesse fare solo per le
costanti...

 
Nel caso che possa fare a meno del programma in C, proverň ad usare la
classe System.
Grazie
  Marco

 condividere solamente tra piů Servlet.
Fai parlare i due processi tramite socket, allora. Dopotutto, queste sono
nate per comunicazione interprocesso ben prima di essere usate in rete ;-)

 nate per comunicazione interprocesso ben prima di essere usate in rete ;-)
Beh, in effetti hai ragione anche te, però mi sembra strano che non ci
sia un modo meno macchinoso (se mi ricordo bene nel vecchio Quick Basic
4.5 era possibile definire delle variabili globali (comando GLOBAL se
non ricordo male), per questo credevo fosse possibile anche qui).
Comunque mi andrebbe bene anche poter settare una variabile di ambiente,
ma purtroppo ho trovato solamente la   System.getenv(String)  che mi
permette di leggere il valore di una variabile di ambiente (deprecated),
ma di una possibile 
System.setenv(String) non ne ho trovata neanche l'ombra.  :-(
Marco

 non ricordo male), per questo credevo fosse possibile anche 
Mi sembra però che le variabili Global di QB non siano interprocesso !
:)
Le public static di una classe condivisa dovrebbero essere equivalenti
alle GLOBAL.
Ciao,
-- 
Massimiliano Bigatti
Java Consulting (Open Consulting)
http://members.xoom.com/bigmax74

non ricordo male), per questo credevo fosse possibile anche qui).
Be', puoi usare cose come file condivisi (ma io credo siano *piu'* macchinose 
:) oppure (in modo nonportabile) servizi di sistema operativo (ad esempio gli 
atoms di Win32), oppure RMI per passare i dati tra le due JVM. Oppure 
serializzare un oggetto e palleggiarlo.
Il punto e' che tu stai cercando di fare comunicazione interprocesso - e la 
cosa ha una certa complessita' intrinseca. Per cui piu' di tanto semplice non 
si puo' fare.
In certi casi speciali (ma non ho presente cosa vuoi fare) ci sono modi 
alternativi - ad esempio puoi usare la linea di comando o condividere memoria 
tra processo padre e processo figlio (anche se in Java questo *e'* macchinoso - 
e' pensato apposta per evitare questi metodi "rischiosi").
Insomma, se vuoi un metodo pulito ed efficiente, temo ci sia poco da fare. :)


Per il momento ho provato ad usare le properties della classe System, ed
in effetti riesco a condividere queste variabili all'interno della Java
machine.
Purtroppo temo che in questo modo non riesca a risolvere il mio
problema, almeno in modo semplice.
Eventualmente (o meglio con molta probabilità) scriverò un altro
messaggio specifico sul mio problema da risolvere.
Grazie a tutti coloro che mi hanno fornito idee e consigli.
Marco