AppletTalk.com Forum Index AppletTalk.com
Java discussions newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

parser XML thread SAFE

 
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian)
View previous topic :: View next topic  
Author Message
Mess
Guest





PostPosted: Sun Jun 25, 2006 12:17 am    Post subject: parser XML thread SAFE Reply with quote



ciao a tutti,
sono alle prese con un applicazione multi-thread. In pratica all'avvio
istanzio n thread ognuno dei quali deve eseguire il parsing di documenti
XML e salvare le info in un database. Il mio problema è che che il
metodo parse() di Xerces risulta non essere thread-safe creandomi seri
problemi. Esiste un parser XML thread-safe? se no ... conoscete qualche
work-around?
Personalmente ho ingenuamente provato a fare qualcosa tipo:

synchronized {
... // some statement;
}

Ma ho ottenuto un secco rifiuto da parte del compilatore ;(
Ringrazio

--
Mess
http://www.mibmagazine.it
Back to top
Giambo
Guest





PostPosted: Sun Jun 25, 2006 2:18 am    Post subject: Re: parser XML thread SAFE Reply with quote



Mess wrote:
Quote:
Il mio problema è che
che il metodo parse() di Xerces risulta non essere thread-safe
creandomi seri problemi.

Che tipo di problemi ?

--
Giambo - Occhio al filtro antispam _e_ alla whitelist !
Back to top
Mess
Guest





PostPosted: Sun Jun 25, 2006 9:56 pm    Post subject: Re: parser XML thread SAFE Reply with quote



La mia applicazione fa del data mining su dei dati presenti in un DBMS
di tipo ORACLE. La committenza per vari motivi ha richiesto che
periodicamente venissero caricati dei dati provenienti da altre URL con
frequenza regolare. Mi sono scritto un'applicazione che dato un elenco
di URL istanzia un thread per ognuna di esse e carica quel che serve nel
DBMS. Alla prima esecuzione ho avuto il problema per il quale chiedo
consiglio... ok?

Giambo wrote:
Quote:
Mess wrote:

Che tipo di problemi ?

java.util.ConcurrentModificationException durante l'esecuzione
multi-thread.
suggerimenti?

Tu fai partire n thread che leggono, immagino, n files separati. Hai
delle strutture dati in comune ? Invece che cercare un parser
thread-safe, perche' non eviti di far partire n thread ?



--
Mess
http://www.mibmagazine.it
Back to top
Giambo
Guest





PostPosted: Sun Jun 25, 2006 10:04 pm    Post subject: Re: parser XML thread SAFE Reply with quote

Mess wrote:
Quote:
La mia applicazione fa del data mining su dei dati presenti in un DBMS
di tipo ORACLE. La committenza per vari motivi ha richiesto che
periodicamente venissero caricati dei dati provenienti da altre URL con
frequenza regolare. Mi sono scritto un'applicazione che dato un elenco
di URL istanzia un thread per ognuna di esse e carica quel che serve nel
DBMS. Alla prima esecuzione ho avuto il problema per il quale chiedo
consiglio... ok?

OK, pero' non capisco perche' cerchi un parser XML sincronizzato invece
che rinunciare ai thread.
Inoltre ci dev'essere qualcosa di sbagliato nel tuo codice se hai quel
tipo di eccezione: I vari thread accedono in qualche modo ad una
struttura dati comune ?

--
Giambo - Occhio al filtro antispam _e_ alla whitelist !
Back to top
Domenico Briganti
Guest





PostPosted: Mon Jun 26, 2006 1:02 am    Post subject: Re: parser XML thread SAFE Reply with quote

"Giambo" <gabriele (AT) giambonini (DOT) nospam.com> ha scritto nel messaggio
news:ca7e9$449ec205$544828b9$21193 (AT) news (DOT) hispeed.ch...
....
Quote:
tipo di eccezione: I vari thread accedono in qualche modo ad una struttura
dati comune ?

Certo, dao che si istanzia un solo builer per parserizzare i file...

Ho affrontato lo stesso problema...la mia soluzione è stata di creare un
thread pool dinamico contenente istanze (ovviamente diverse) del builder,
appena partiva una richiesta veniva richiesto al pool un builder che non si
stava utilizzando, marchiandolo come occupato e liberando alla fine della
"parserizzata".

Spero di esserti stato d'aiuto.

Ciao
Domenico
Back to top
Mess
Guest





PostPosted: Mon Jun 26, 2006 3:12 pm    Post subject: Re: parser XML thread SAFE Reply with quote

Domenico Briganti wrote:
Quote:
"Giambo" <gabriele (AT) giambonini (DOT) nospam.com> ha scritto nel messaggio
news:ca7e9$449ec205$544828b9$21193 (AT) news (DOT) hispeed.ch...
...
tipo di eccezione: I vari thread accedono in qualche modo ad una struttura
dati comune ?

Certo, dao che si istanzia un solo builer per parserizzare i file...

Ho affrontato lo stesso problema...la mia soluzione � stata di creare un
thread pool dinamico contenente istanze (ovviamente diverse) del builder,
appena partiva una richiesta veniva richiesto al pool un builder che non si
stava utilizzando, marchiandolo come occupato e liberando alla fine della
"parserizzata".

Spero di esserti stato d'aiuto.

Ciao
Domenico


mmmh se non sono troppo indiscreto puoi essere piu' preciso nel

descrivere la tua soluzione. Wink
Il mio problema è che ho un sotto-sistema a cui accedo mediante un Proxy
che si occupa di prendere una URL, farne il parsing ed allocare gli
oggetti necessari. Preciso che io non faccio altro che scrivere:

Proxy pn = new ProxyManager("http://www.unaurl.com");

Dal momento che questa operazione va fatta con cadenza regolare ma le
URL dai parsare hanno dimensione variabile ho preferito istanziare un
thread per ogni URL in modo da rendere asincrono il caricamento delle
info nel DB. In codice java:

public class myClass extends Thread{

public void run(){
try {
new ProxyNews( url );
}
catch (InterruptedException ex) {
log.debug("# ["
+ this.getId()
+ "] Puller thread interrupted ...");
}
catch (Exception ex) {
System.err.println("# [" + this.getId()
+ "] Puller Thread Exception ..."
+ ex.getMessage() );
ex.printStackTrace();
}
log.debug("# [" + this.getId() + "] Done!");
}
}


Il problema è che nonostante il sotto-sistema non abbia nessuna variable
static il metodo parse() dell'oggetto XMLReader di Xerces non è
thread-safe creandomi il problema descritto nei post precedenti.
Ogni suggerimento è ben accetto.

--
Mess
http://www.mibmagazine.it
Back to top
Domenico Briganti
Guest





PostPosted: Mon Jun 26, 2006 6:35 pm    Post subject: Re: parser XML thread SAFE Reply with quote

"Mess" <noreplyformess (AT) mibmagazine (DOT) it> ha scritto nel messaggio
news:449fb2f9$0$16939$4fafbaef (AT) reader4 (DOT) news.tin.it...
Quote:
Domenico Briganti wrote:
"Giambo" <gabriele (AT) giambonini (DOT) nospam.com> ha scritto nel messaggio
mmmh se non sono troppo indiscreto puoi essere piu' preciso nel descrivere
la tua soluzione. Wink
Il mio problema è che ho un sotto-sistema a cui accedo mediante un Proxy
che si occupa di prendere una URL, farne il parsing ed allocare gli
oggetti necessari. Preciso che io non faccio altro che scrivere:

Proxy pn = new ProxyManager("http://www.unaurl.com");


Suggerimento 1: ma perchè allora non ti scarichi in multithread i file e poi
li parsifichi uno a uno? il tempo totale in questo caso non dovrebbe
cambiare (se non hai un biprocessore o qualcosa di +)...

OK, se non sbaglio tu crei questi ProxyManager e all'interno usi il
XMLReader che ti eri istanziato prima? se è cosi, il mio consiglio è quello
di creare una pool di XMLReader e creare un metodo che ti ritorna un
XMLReader libero che non sta parserizzando nessun file. (come un pool di
connessioni al db....)

Saluti
Domenico
Back to top
Mess
Guest





PostPosted: Tue Jun 27, 2006 2:38 pm    Post subject: Re: parser XML thread SAFE Reply with quote

Ti ringrazio molto per la risposta ... anche se sinceramente speravo ci
fossero delle soluzioni meno articolate. Possibile che nessun'altro
abbia mai avuto il mio stesso problema ?


Domenico Briganti wrote:
Quote:
"Mess" <noreplyformess (AT) mibmagazine (DOT) it> ha scritto nel messaggio
news:449fb2f9$0$16939$4fafbaef (AT) reader4 (DOT) news.tin.it...
Domenico Briganti wrote:
"Giambo" <gabriele (AT) giambonini (DOT) nospam.com> ha scritto nel messaggio
mmmh se non sono troppo indiscreto puoi essere piu' preciso nel descrivere
la tua soluzione. Wink
Il mio problema � che ho un sotto-sistema a cui accedo mediante un Proxy
che si occupa di prendere una URL, farne il parsing ed allocare gli
oggetti necessari. Preciso che io non faccio altro che scrivere:

Proxy pn = new ProxyManager("http://www.unaurl.com");


Suggerimento 1: ma perch� allora non ti scarichi in multithread i file e poi
li parsifichi uno a uno? il tempo totale in questo caso non dovrebbe
cambiare (se non hai un biprocessore o qualcosa di +)...

OK, se non sbaglio tu crei questi ProxyManager e all'interno usi il
XMLReader che ti eri istanziato prima? se � cosi, il mio consiglio � quello
di creare una pool di XMLReader e creare un metodo che ti ritorna un
XMLReader libero che non sta parserizzando nessun file. (come un pool di
connessioni al db....)

Saluti
Domenico




--
Mess
http://www.mibmagazine.it
Back to top
Mess
Guest





PostPosted: Sun Jul 02, 2006 4:31 pm    Post subject: Re: parser XML thread SAFE Reply with quote

Signori,
per dovere di cronaca vi riporto che non sono riuscito ad aggirare il
problema ma ho dovuto rendere thread-safe il mio sotto-sistema di
parsing serializzando l'accesso al parser XML mediante un Singleton.
Chi fosse interessato alla soluzione mi contatti senza problemi.
Ringrazio cmq tutti per l'aiuto e la voglia di collaborare.

--
Mess
http://www.mibmagazine.it

Mess wrote:
Quote:
Ti ringrazio molto per la risposta ... anche se sinceramente speravo ci
fossero delle soluzioni meno articolate. Possibile che nessun'altro
abbia mai avuto il mio stesso problema ?


Domenico Briganti wrote:
"Mess" <noreplyformess (AT) mibmagazine (DOT) it> ha scritto nel messaggio
news:449fb2f9$0$16939$4fafbaef (AT) reader4 (DOT) news.tin.it...
Domenico Briganti wrote:
"Giambo" <gabriele (AT) giambonini (DOT) nospam.com> ha scritto nel messaggio
mmmh se non sono troppo indiscreto puoi essere piu' preciso nel
descrivere la tua soluzione. Wink
Il mio problema � che ho un sotto-sistema a cui accedo mediante un
Proxy che si occupa di prendere una URL, farne il parsing ed allocare
gli oggetti necessari. Preciso che io non faccio altro che scrivere:

Proxy pn = new ProxyManager("http://www.unaurl.com");


Suggerimento 1: ma perch� allora non ti scarichi in multithread i file
e poi li parsifichi uno a uno? il tempo totale in questo caso non
dovrebbe cambiare (se non hai un biprocessore o qualcosa di +)...

OK, se non sbaglio tu crei questi ProxyManager e all'interno usi il
XMLReader che ti eri istanziato prima? se � cosi, il mio consiglio �
quello di creare una pool di XMLReader e creare un metodo che ti
ritorna un XMLReader libero che non sta parserizzando nessun file.
(come un pool di connessioni al db....)

Saluti
Domenico


Back to top
Display posts from previous:   
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.