Ik ben op dit moment een ruleengine aan het schrijven en het is de bedoeling dat deze oa onder een ejb omgeving gaat draaien. De ruleengine kan zelf weer contact opnemen naar zijn omgeving mbv een callback, bv als een gebruiker gegevens moet invoeren, of als uit de database info gehaald moet worden. Tot zover geen probleem. Ik vraag me alleen af hoe dit het beste in een EJB omgeving geplaatst kan worden.
Ik wil een statefull sessionbean gebruiken die een referentie heeft naar de ruleengine, een interface implementeerd (via een innerclass uiteraard), waarmee de ruleengine callbacks kan doen op de omgeving waar hij in draait. Als een database (of entitybeans) aangesproken moeten worden dan is het geen probleem, maar ik zit even moet hoe bv een client van die sessionbean weer kan aanroepen.
Ik weet dat het mogelijk is om callbacks te doen met ejb (ik geloof dat het met rmi wel mogelijk was). Maar ik zit even met het feit hoe ik de sessionbean moet achterlaten. Moet de callback naar de client een synchrone call worden? Of een asynchrone? Als het een asynchrone call gaat worden wat ga ik dan met die bean doen?
Gewoonlijk zou ik de ruleengine wrappen in een object met zijn eigen thread, en zo gauw de ruleengine een callback doet, een down doen op een semafoor en zo gauw de info weer beschikbaar is, weer een up doen op de semafoor zodat de engine weer verder kan. Het is ejb omgevingen echte niet toegestaan om zelfs met threads aan de slag te gaan, dus ik zit vanaf dit punt eigelijk een beetje met mijn handen in het haar.
[edit]
Het kan trouwens voorkomen dat er niet de mogelijkheid is om een callback te maken omdat de client technology dit niet toelaat. Wat is dan de beste manier? De sessionbean om de zoveel seconden te pollen over zijn toestand? {antwoordennodig,foutmelding,klaar,....} en op basis daarvan nieuwe acties te ondernemen?
Ik wil een statefull sessionbean gebruiken die een referentie heeft naar de ruleengine, een interface implementeerd (via een innerclass uiteraard), waarmee de ruleengine callbacks kan doen op de omgeving waar hij in draait. Als een database (of entitybeans) aangesproken moeten worden dan is het geen probleem, maar ik zit even moet hoe bv een client van die sessionbean weer kan aanroepen.
Ik weet dat het mogelijk is om callbacks te doen met ejb (ik geloof dat het met rmi wel mogelijk was). Maar ik zit even met het feit hoe ik de sessionbean moet achterlaten. Moet de callback naar de client een synchrone call worden? Of een asynchrone? Als het een asynchrone call gaat worden wat ga ik dan met die bean doen?
Gewoonlijk zou ik de ruleengine wrappen in een object met zijn eigen thread, en zo gauw de ruleengine een callback doet, een down doen op een semafoor en zo gauw de info weer beschikbaar is, weer een up doen op de semafoor zodat de engine weer verder kan. Het is ejb omgevingen echte niet toegestaan om zelfs met threads aan de slag te gaan, dus ik zit vanaf dit punt eigelijk een beetje met mijn handen in het haar.
[edit]
Het kan trouwens voorkomen dat er niet de mogelijkheid is om een callback te maken omdat de client technology dit niet toelaat. Wat is dan de beste manier? De sessionbean om de zoveel seconden te pollen over zijn toestand? {antwoordennodig,foutmelding,klaar,....} en op basis daarvan nieuwe acties te ondernemen?
[ Voor 10% gewijzigd door Alarmnummer op 06-07-2004 11:08 ]