Salve a tutti. Rinnovo i miei complimenti per l'ottimo servizio che offrite. Volevo porvi una domanda e spero che mi possiate dare qualche suggerimento. Probabilmente la soluzione è molto semplice, ma non riesco proprio a sbloccarmi. PREMESSA: Ho scelto jRuby perché devo usare delle classi JAVA e più precisamente vorrei utilizzare le API di Jena PROBLEMA: Riesco facilmente ad interfacciarmi con Java, ma trovo delle limitazioni all'interno dei controller di Rails. All'interno del controller inizializzo una classe jena (ModelFactory) che crea un modello (Jena) di una ontologia. La salvo in una variabile (@model) ma non riesco a capire come posso conservarla in tutte le action. @model = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) In pratica vorrei poter mantenere il contenuto di @model in ogni action SOLUZIONI FALLITE: - session: essendo ModelFactory una classe Jena/Java non è possibile realizzare una conversione automatica con marshal - model e salvataggio nel DB: l'operazione fallisce perché non riesce ad applicare il metodo 'gsub' alla classe (perché ovviamente non lo contiene) SOLUZIONE ATTUALE (molto poco elegante): Creo una costante. MODEL = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) E' una soluzione che non mi piace affatto. C'è un modo alternativo per superare questo mio problema? Vi ringrazio anticipatamente
on 2010-08-24 12:31
on 2010-08-25 11:27
Ciao Pippo, non mi è chiarissimo il problema, se ti interessa la persistenza o solo una visibilità maggiore, in quest'ultimo caso hai provato a crearlo nell'application controller?
on 2010-08-25 16:57
Marco Mastrodonato wrote: > Ciao Pippo, > non mi è chiarissimo il problema, se ti interessa la persistenza o solo > una visibilità maggiore, in quest'ultimo caso hai provato a crearlo > nell'application controller? Si scusa hai ragione mi sono espresso male. Vorrei che la variabile sia persistente e mantenesse quindi il contenuto fra pagina e pagina. Jena genera un suo modello(jena) su cui si possono eseguire svariate interrogazioni. Io sostanzialmente non vorrei rigenerare ogni volta questo modello(jena). In rails il contenuto della variabile è persistente solo fra il metodo del controller e la sua relativa view. Fra i diversi metodi dello stesso controller la variabile viene reinizializzata ad ogni accesso. In generale, risolvevo questa esigenza con session o memorizzando in un DB, ma in questo caso non posso. Credo che sia collegato alla spiegazione fornita qui: http://www.ruby-forum.com/topic/133234 Probabilmente la soluzione è banale ma proprio non trovo vie di uscita. Sostanzialmente tu mi suggerisci di creare il modello(jena) nell'application_controller? Provo
on 2010-08-25 17:05
2010/8/24 Pippo Sario <tuland@gmail.com>: > > @model = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) > provato a serializzare/deserializzare e mettere in session quello? Puoi sicuramente come serializzazione java, ma mi pare che jena potesse serializzare in N3 e robe simili, poi le metti come campo text/blob nel db > SOLUZIONE ATTUALE (molto poco elegante): > Creo una costante. > MODEL = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) > E' una soluzione che non mi piace affatto. C'è un modo alternativo per > superare questo mio problema? perché?
on 2010-08-25 17:16
Ciao, come spiegato nel link che citavi, quando passi da un'action all'altra (ad esempio cliccando su un link o su un submit), l'oggetto controller cambia; questo vuol dire che non puoi passare oggetti complessi da un'action all'altra: sostanzialmente puoi passare (ad esempio tramite session) solo stringhe e numeri. Non conosco le classi java di cui parli, quindi ho una domanda: quanto è costoso produrre l'oggetto che ti serve? Se non è costoso potresti semplicemente usare un'instance variable, una costante o quant'altro. Se il costo è proibitivo, puoi tentare di scoprire se l'oggetto è serializzabile. pietro
on 2010-08-25 17:39
gabriele renzi wrote: > 2010/8/24 Pippo Sario <tuland@gmail.com>: >> >> @model = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) >> > provato a serializzare/deserializzare e mettere in session quello? > Puoi sicuramente come serializzazione java, ma mi pare che jena > potesse serializzare in N3 e robe simili, poi le metti come campo > text/blob nel db > Più che altro è che sto caricando una ontologia di 20 MB e tirarla su ogni volta ad ogni azione non è troppo divertente per l'utente. Quindi in Java dici che posso serializzare la classe? Ora ho fatto una ricerca più approfondita nelle API di Jena e credo che esistano metodi di questo tipo. Hai ragione. A occhio dovrebbero essere adatte cose come: ModelFactory.createFileModelMaker ModelFactory.createModelRDBMaker Io cercavo di risolvere la cosa direttamente in ruby ed effettivamente mi complicavo le cose. > >> SOLUZIONE ATTUALE (molto poco elegante): >> Creo una costante. >> MODEL = ModelFactory.createOntologyModel(OntModelSpec::OWL_MEM) >> E' una soluzione che non mi piace affatto. C'� un modo alternativo per >> superare questo mio problema? > > > perch�? Perché poi non posso più modificare il model in run-time
on 2010-08-25 17:49
Pietro Giorgianni wrote: > Non conosco le classi java di cui parli, quindi ho una domanda: quanto > � costoso produrre l'oggetto che ti serve? > > Se non � costoso potresti semplicemente usare un'instance variable, > una costante o quant'altro. > Beh ma anche le instance variable vengono rigenerate, o mi sbaglio? Mi riferisco a @model che ho citato prima, per esempio. Ad ogni richiesta al server me la ritrovo reinizializzata. Con le costanti funziona, ma poi non posso modificarle run-time. Si è abbastanza costoso produrre quell'oggetto. Ogni volta sarebbe una lettura di 20Mb > Se il costo � proibitivo, puoi tentare di scoprire se l'oggetto � serializzabile. Si forse opterò per qualcosa di simile Grazie
on 2010-08-25 18:00
2010/8/25 Pippo Sario <tuland@gmail.com>: > Hai ragione. A occhio dovrebbero essere adatte cose come: > > ModelFactory.createFileModelMaker > ModelFactory.createModelRDBMaker > > Io cercavo di risolvere la cosa direttamente in ruby ed effettivamente > mi complicavo le cose. no quelli sono anche più smart: si gestiscono la persistenza da se su file o su db, se per te va bene è sicuramente la soluzione migliore. > Perché poi non posso più modificare il model in run-time In realtà puoi farlo, una costante significa solo che non puoi cambiare l'associazione nome-oggetto, ma l'oggetto rimane mutabile: >> A=Array.new => [] >> A=2 (irb):2: warning: already initialized constant A => 2 >> A=Array.new (irb):3: warning: already initialized constant A => [] >> A << 2 => [2] >> A => [2] Ma si, se devi modificarlo poi avresti casini con i thread e i restart e la persistenza, che è non è bello :)
on 2010-08-26 10:19
gabriele renzi wrote: > 2010/8/25 Pippo Sario <tuland@gmail.com>: > >> Hai ragione. A occhio dovrebbero essere adatte cose come: >> >> ModelFactory.createFileModelMaker >> ModelFactory.createModelRDBMaker >> >> Io cercavo di risolvere la cosa direttamente in ruby ed effettivamente >> mi complicavo le cose. > > > no quelli sono anche più smart: si gestiscono la persistenza da se su > file o su db, se per te va bene è sicuramente la soluzione migliore. > Grazie mille! Come sempre, gentili e di grande aiuto.
on 2010-08-27 10:14
2010/8/24 Pippo Sario <tuland@gmail.com>: > Salve a tutti. Rinnovo i miei complimenti per l'ottimo servizio che > offrite. > > Volevo porvi una domanda e spero che mi possiate dare qualche > suggerimento. Probabilmente la soluzione è molto semplice, ma non riesco > proprio a sbloccarmi. > > PREMESSA: > Ho scelto jRuby perché devo usare delle classi JAVA e più precisamente > vorrei utilizzare le API di Jena Scusa hai scelto jruby esclusivamente perche' devi usare classi java o ci sono degli altri motivi? Io non uso java ma utilizzo jruby sostanzialmente per un motivo, la facilita' di deploy delle applicazioni. Rispetto a ruby non ho trovato nessunissima differenza.
on 2010-09-14 16:19
Concludo il topic segnalando che alla fine sto procedendo con l'utilizzo di activeRDF. C'è un adaptor di Jena che gestisce proprio la persistenza: http://github.com/net7/ActiveRDF/blob/master/activerdf-jena/lib/activerdf_jena/jena_adapter.rb
on 2010-09-14 16:26
2010/9/14 Pippo Sario <tuland@gmail.com>: > Concludo il topic segnalando che alla fine sto procedendo con l'utilizzo > di activeRDF. C'è un adaptor di Jena che gestisce proprio la > persistenza: Non hai letto la mia domanda?
on 2010-09-14 17:31
Msan Msan wrote: > 2010/8/24 Pippo Sario <tuland@gmail.com>: >> Salve a tutti. Rinnovo i miei complimenti per l'ottimo servizio che >> offrite. >> >> Volevo porvi una domanda e spero che mi possiate dare qualche >> suggerimento. Probabilmente la soluzione � molto semplice, ma non riesco >> proprio a sbloccarmi. >> >> PREMESSA: >> Ho scelto jRuby perch� devo usare delle classi JAVA e pi� precisamente >> vorrei utilizzare le API di Jena > > Scusa hai scelto jruby esclusivamente perche' devi usare classi java o > ci sono degli altri motivi? > Io non uso java ma utilizzo jruby sostanzialmente per un motivo, la > facilita' di deploy delle applicazioni. > Rispetto a ruby non ho trovato nessunissima differenza. Scusa non avevo letto! Si essenzialmente per il riuso di classi Java, altrimenti tendo ad usare ruby. Potrei sbagliarmi, ma credo che il supporto sia più limitato (per esempio con le gemme). Quindi sostanzialmente uso jRuby solo quando è strettamente necessario. In ogni caso con jRuby non ho mai avuto problemi. Anch'io ho trovato il deploy molto rapido: io uso per esempio warbler.
on 2010-09-14 17:50
2010/9/14 Pippo Sario <tuland@gmail.com>: >>> Ho scelto jRuby perch� devo usare delle classi JAVA e pi� precisamente > Si essenzialmente per il riuso di classi Java, altrimenti tendo ad usare > ruby. Potrei sbagliarmi, ma credo che il supporto sia più limitato (per > esempio con le gemme). Quindi sostanzialmente uso jRuby solo quando è > strettamente necessario. In ogni caso con jRuby non ho mai avuto > problemi. Anch'io ho trovato il deploy molto rapido: io uso per esempio > warbler. Anch'io uso warbler e rispetto alla soluzione apache + passenger non c'e' paragone. Per le gemme ormai sono quasi tutte supportate.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.