[rules-users] Dynamic changes to drl file
Have been stuck with this for quite some time now. Would appreciate if anyone could help me out. I was checking if changes could be made to the rule file at runtime and the following is the block of code that i tried RuleBase ruleBase = readRule(); WorkingMemory workingMemory = ruleBase.newStatefulSession(false); // to keep reference // Create a message object workingMemory.insert( message ); workingMemory.fireAllRules(); When i try chaning the "drl" file at run time the change doesnt get reflected. Is there anything else i need to be doing here? Any additional jar files ? To have this change take effect at runtime - do i need to create a new session for each run or do i need to retain the session - i tried both "newStatefulSession(false)" and "newStatefulSession()" - get the same result with both. -- View this message in context: http://www.nabble.com/Dynamic-changes-to-drl-file-tf4317491.html#a12293461 Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Drools - is dynamic change possible ?
Any suggestions / guidance for the below question ? pns77 wrote: > > Hi, > > The following is the block of code that i tried > > RuleBase ruleBase = readRule(); > WorkingMemory workingMemory = > ruleBase.newStatefulSession(false); // to keep reference > // Create a message object > workingMemory.insert( message ); > workingMemory.fireAllRules(); > > When i try chaning the "drl" file at run time the change doesnt get > reflected. Is there anything else i need to be doing here? Any additional > jar files ? > > To have this change take effect at runtime - do i need to create a new > session for each run or do i need to retain the session - i tried both > "newStatefulSession(false)" and "newStatefulSession()" - get the same > result with both. > > Just to add on...for two successive runs, the times taken to create > RuleBase object were > > <<<<<<<< START >>>>>>>>>>1187339950422 > <<<<<<<<<< FINISH >>>>>>>>>>>>>>>>.1187339956100 => ~ 6 seconds > > <<<<<<<< START >>>>>>>>>>1187340049090 > <<<<<<<<<< FINISH >>>>>>>>>>>>>>>>.1187340049721 => ~ .6 seconds > > Doesnt this mean that there is a cache that prevents the modified drl file > from being parsed ? > > > Mark Proctor wrote: >> >> Yes this can be done at runtime. The RuleBase has a reference to each of >> the created StatefulSessions that has not called dispose() yet and will >> push those rule changes out to each running session. >> >> >> Mark >> pns77 wrote: >>> Thanks for the response. >>> >>> Just to confirm when you say "...but you can remove a rule and add >>> another >>> in its place..." - can this be done at runtime - i.e server is running, >>> i go >>> add a new rule/change the output of an existing rule. If so, can i have >>> the >>> new rule take effect ? >>> >>> Also, do i need to include any specific jar file for this dynamic >>> feature ? >>> >>> Am not looking at performance here - more from a >>> maintenance/changeability >>> point of view. >>> >>> >>> Mark Proctor wrote: >>> >>>> you cannot change an individual rule, but you can remove a rule and add >>>> another in its place. >>>> >>>> Mark >>>> pns77 wrote: >>>> >>>>> Have been able to execute/run a sample Drools file >>>>> >>>>> import com.sample.Message; >>>>> >>>>> rule "Hello World" >>>>> when >>>>> m : Message( status == Message.HELLO, message : message, >>>>> testStringExternal : testStringExternal ) >>>>> then >>>>> System.out.println( message ); >>>>> m.setMessage( "Goodbye cruel world" ); >>>>> System.out.println( testStringExternal + "Message.HELLO" ); >>>>> m.setStatus( Message.GOODBYE ); >>>>> update( m ); >>>>> end >>>>> >>>>> Now, is it possible to change the logic dynamically at runtime ? Or is >>>>> the >>>>> drl file used only to externalize the business logic? I tried changing >>>>> the >>>>> message in drl file and it didnt get reflected >>>>> >>>>> Environment - RAD 6.0/jdk 1.4 >>>>> >>>>> Used the following set of jar files >>>>> C:\Drools\libraries\drools-core.jar; >>>>> C:\Drools\libraries\drools-compiler.jar; >>>>> C:\Drools\libraries\mvel14.jar; >>>>> C:\Drools\libraries\antlr-runtime.jar; >>>>> C:\Drools\libraries\xstream.jar; >>>>> C:\Drools\lib\core-3.2.3.v_686_R32x.jar; >>>>> >>>>> >>>> ___ >>>> rules-users mailing list >>>> rules-users@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>>> >>> >>> >> >> >> ___ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > -- View this message in context: http://www.nabble.com/Drools---is-dynamic-change-possible---tf4277622.html#a12248108 Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Drools - is dynamic change possible ?
Hi, The following is the block of code that i tried RuleBase ruleBase = readRule(); WorkingMemory workingMemory = ruleBase.newStatefulSession(false); // to keep reference // Create a message object workingMemory.insert( message ); workingMemory.fireAllRules(); When i try chaning the "drl" file at run time the change doesnt get reflected. Is there anything else i need to be doing here? Any additional jar files ? To have this change take effect at runtime - do i need to create a new session for each run or do i need to retain the session - i tried both "newStatefulSession(false)" and "newStatefulSession()" - get the same result with both. Mark Proctor wrote: > > Yes this can be done at runtime. The RuleBase has a reference to each of > the created StatefulSessions that has not called dispose() yet and will > push those rule changes out to each running session. > > > Mark > pns77 wrote: >> Thanks for the response. >> >> Just to confirm when you say "...but you can remove a rule and add >> another >> in its place..." - can this be done at runtime - i.e server is running, i >> go >> add a new rule/change the output of an existing rule. If so, can i have >> the >> new rule take effect ? >> >> Also, do i need to include any specific jar file for this dynamic feature >> ? >> >> Am not looking at performance here - more from a >> maintenance/changeability >> point of view. >> >> >> Mark Proctor wrote: >> >>> you cannot change an individual rule, but you can remove a rule and add >>> another in its place. >>> >>> Mark >>> pns77 wrote: >>> >>>> Have been able to execute/run a sample Drools file >>>> >>>> import com.sample.Message; >>>> >>>> rule "Hello World" >>>> when >>>> m : Message( status == Message.HELLO, message : message, >>>> testStringExternal : testStringExternal ) >>>> then >>>> System.out.println( message ); >>>> m.setMessage( "Goodbye cruel world" ); >>>> System.out.println( testStringExternal + "Message.HELLO" ); >>>> m.setStatus( Message.GOODBYE ); >>>> update( m ); >>>> end >>>> >>>> Now, is it possible to change the logic dynamically at runtime ? Or is >>>> the >>>> drl file used only to externalize the business logic? I tried changing >>>> the >>>> message in drl file and it didnt get reflected >>>> >>>> Environment - RAD 6.0/jdk 1.4 >>>> >>>> Used the following set of jar files >>>> C:\Drools\libraries\drools-core.jar; >>>> C:\Drools\libraries\drools-compiler.jar; >>>> C:\Drools\libraries\mvel14.jar; >>>> C:\Drools\libraries\antlr-runtime.jar; >>>> C:\Drools\libraries\xstream.jar; >>>> C:\Drools\lib\core-3.2.3.v_686_R32x.jar; >>>> >>>> >>> ___ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >>> >> >> > > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > -- View this message in context: http://www.nabble.com/Drools---is-dynamic-change-possible---tf4277622.html#a12195188 Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Drools - is dynamic change possible ?
Thanks for the response. Just to confirm when you say "...but you can remove a rule and add another in its place..." - can this be done at runtime - i.e server is running, i go add a new rule/change the output of an existing rule. If so, can i have the new rule take effect ? Also, do i need to include any specific jar file for this dynamic feature ? Am not looking at performance here - more from a maintenance/changeability point of view. Mark Proctor wrote: > > you cannot change an individual rule, but you can remove a rule and add > another in its place. > > Mark > pns77 wrote: >> Have been able to execute/run a sample Drools file >> >> import com.sample.Message; >> >> rule "Hello World" >> when >> m : Message( status == Message.HELLO, message : message, >> testStringExternal : testStringExternal ) >> then >> System.out.println( message ); >> m.setMessage( "Goodbye cruel world" ); >> System.out.println( testStringExternal + "Message.HELLO" ); >> m.setStatus( Message.GOODBYE ); >> update( m ); >> end >> >> Now, is it possible to change the logic dynamically at runtime ? Or is >> the >> drl file used only to externalize the business logic? I tried changing >> the >> message in drl file and it didnt get reflected >> >> Environment - RAD 6.0/jdk 1.4 >> >> Used the following set of jar files >> C:\Drools\libraries\drools-core.jar; >> C:\Drools\libraries\drools-compiler.jar; >> C:\Drools\libraries\mvel14.jar; >> C:\Drools\libraries\antlr-runtime.jar; >> C:\Drools\libraries\xstream.jar; >> C:\Drools\lib\core-3.2.3.v_686_R32x.jar; >> > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > -- View this message in context: http://www.nabble.com/Drools---is-dynamic-change-possible---tf4277622.html#a12180915 Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
[rules-users] Drools - is dynamic change possible ?
Have been able to execute/run a sample Drools file import com.sample.Message; rule "Hello World" when m : Message( status == Message.HELLO, message : message, testStringExternal : testStringExternal ) then System.out.println( message ); m.setMessage( "Goodbye cruel world" ); System.out.println( testStringExternal + "Message.HELLO" ); m.setStatus( Message.GOODBYE ); update( m ); end Now, is it possible to change the logic dynamically at runtime ? Or is the drl file used only to externalize the business logic? I tried changing the message in drl file and it didnt get reflected Environment - RAD 6.0/jdk 1.4 Used the following set of jar files C:\Drools\libraries\drools-core.jar; C:\Drools\libraries\drools-compiler.jar; C:\Drools\libraries\mvel14.jar; C:\Drools\libraries\antlr-runtime.jar; C:\Drools\libraries\xstream.jar; C:\Drools\lib\core-3.2.3.v_686_R32x.jar; -- View this message in context: http://www.nabble.com/Drools---is-dynamic-change-possible---tf4277622.html#a12175583 Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users