2010-09-28 7 views
9

Attualmente sto insegnando a Drools Expert/Flow e GWT. Voglio utilizzare Drools Flow come un bus evento/comando e motore di regole aziendali per ottenere un accoppiamento lento tra diverse parti dell'applicazione.Best practice per l'utilizzo di Drools Expert/Flow in un'applicazione Web

Finora sono riuscito a far funzionare sia Expert che Flow dai miei casi di test, ma ho difficoltà a capire come implementare Flows all'interno di un contenitore web.

Devo inserire tutto lo scaffold in un bean Seless Stateless e lasciare che ogni richiesta imposti tutto da zero e quindi esegua i flussi/regole? Questo mi sembra uno spreco di risorse. Posso invece archiviare una singola sessione di conoscenza e condividere le sessioni tra richieste web, accedendole contemporaneamente, lo scenario si ridimensiona ed è thread-safe (la mia ipotesi è no)? Riunire le sessioni di conoscenza è una buona idea?

Quello che sto chiedendo è fondamentalmente se ci sono delle migliori pratiche per quanto sopra? La documentazione e gli esempi, anche se per il resto abbastanza buoni, non sono chiari su questi punti particolari.

Ho letto qualcosa su Drools Grid, non so se questo avrebbe risolto il mio problema e sembra essere in fase di sviluppo. Se le mie domande non sono chiare, ti preghiamo di dirlo.

BR Magnus

risposta

3

Un KnowledgeBase è thread-safe e pesanti di peso (non è poco per creare), quindi dovrete probabilmente vuole mantenere che in un ambito di applicazione.

Per il momento, la maggior parte delle persone tendono ad utilizzare un'architettura senza stato e creare una StatelessKnowlegdeSession (filo non sicuro ed economico per creare) per ogni richiesta web, ad esempio in una session bean senza stato (o una cucitura/fagioli CDI o di un fagiolo di primavera). Tuttavia, se si dispone del potere di EJB stateful, può essere gratificante utilizzare una StafefulKnowlegdeSession per gestire tutte le richieste nella stessa conversazione.

io non sono sicuro se StatefulKnowlegdeSession è thread-safe (non la penso così), così ho fatto un problema: https://issues.jboss.org/browse/JBRULES-2842

+0

Unfortunaly utilizzando Drools flusso significa implicitamente che devo usare uno StatefulKnowledgeSession, altrimenti flusso doesn' lavoro. L'ho provato e da quello che ricordo ho ottenuto un'eccezione di runtime. L'unico indizio che riesco a trovare, fino ad ora, è che persistono tutti i dati sulla sessione tra le richieste. Immagino che si riduca ai modelli di utilizzo dello strumento. Forse mi manca qualcosa di fondamentale nella mia applicazione di Drools. Gli esempi che ho trovato sembrano più orientati all'utilizzo di applicazioni desktop (Swing) e ad una sessione in corso continua. – Magnus