Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
drools £­¹æÔòÓï·¨
 
  3118  次浏览      27
 2018-3-28 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÔÚ Drools µ±ÖУ¬¹æÔòµÄ±àÒëÓëÔËÐÐҪͨ¹ýDrools ÌṩµÄ¸÷ÖÖAPI À´ÊµÏÖ¡£

ÎÄÕ½ṹ

1. »ù´¡api

2. FACT¶ÔÏó

3. ¹æÔò

4. º¯Êý

1. »ù´¡api

ÔÚ Drools µ±ÖУ¬¹æÔòµÄ±àÒëÓëÔËÐÐҪͨ¹ýDrools ÌṩµÄ¸÷ÖÖAPI À´ÊµÏÖ£¬ÕâЩAPI ×ÜÌåÀ´½²¿ÉÒÔ·ÖΪÈýÀࣺ¹æÔò±àÒë¡¢¹æÔòÊÕ¼¯ºÍ¹æÔòµÄÖ´ÐС£Íê³ÉÕâЩ¹¤×÷µÄAPI Ö÷ÒªÓÐKnowledgeBuilder¡¢KnowledgeBase¡¢StatefulKnowledgeSession¡¢StatelessKnowledgeSession¡¢¡¢µÈ£¬ËüÃÇÆðµ½Á˶ԹæÔòÎļþ½øÐÐÊÕ¼¯¡¢±àÒë¡¢²é´í¡¢²åÈëfact¡¢ÉèÖÃglobal¡¢Ö´ÐйæÔò»ò¹æÔòÁ÷µÈ×÷ÓÃ

1.1 KnowledgeBuilder

KnowledgeBuilder ÔÚÒµÎñ´úÂëµ±ÖÐÊÕ¼¯ÒѾ­±àдºÃµÄ¹æÔò£¬ È»ºó¶ÔÕâЩ¹æÔòÎļþ½øÐбàÒ룬 ×îÖÕ²úÉúÒ»Åú±àÒëºÃµÄ¹æÔò°ü£¨KnowledgePackage£©¸øÆäËüµÄÓ¦ÓóÌÐòʹÓá£KnowledgeBuilder ÔÚ±àÒë¹æÔòµÄʱºò¿ÉÒÔͨ¹ýÆäÌṩµÄhasErrors()·½·¨µÃµ½±àÒë¹æÔò¹ý³ÌÖз¢ÏÖ¹æÔòÊÇ·ñÓдíÎó£¬Èç¹ûÓеĻ°Í¨¹ýÆäÌṩµÄgetErrors()·½·¨½«´íÎó´òÓ¡³öÀ´£¬ÒÔ°ïÖúÎÒÃÇÕÒµ½¹æÔòµ±ÖеĴíÎóÐÅÏ¢¡£

1.2 KnowledgeBase

KnowledgeBase ÊÇ Drools ÌṩµÄÓÃÀ´ÊÕ¼¯Ó¦Óõ±ÖÐ֪ʶ£¨knowledge£©¶¨ÒåµÄ֪ʶ¿â¶ÔÏó£¬ÔÚÒ»¸öKnowledgeBase µ±ÖпÉÒÔ°üº¬ÆÕͨµÄ¹æÔò£¨rule£©¡¢¹æÔòÁ÷(rule flow)¡¢º¯Êý¶¨Òå(function)¡¢Óû§×Ô¶¨Òå¶ÔÏó£¨type model£©µÈ¡£KnowledgeBase ±¾Éí²»°üº¬ÈκÎÒµÎñÊý¾Ý¶ÔÏó£¨fact ¶ÔÏ󣬺óÃæÓÐÏàÓ¦Õ½Ú×ÅÖØ½éÉÜfact ¶ÔÏ󣩣¬ÒµÎñ¶ÔÏó¶¼ÊDzåÈëµ½ÓÉKnowledgeBase²úÉúµÄÁ½ÖÖÀàÐ͵Äsession ¶ÔÏóµ±ÖУ¨StatefulKnowledgeSession ºÍStatelessKnowledgeSession£¬ºóÃæ»áÓжÔÓ¦µÄÕ½ڶÔÕâÁ½ÖÖÀàÐ͵ĶÔÏó½øÐнéÉÜ£©£¬Í¨¹ýsession ¶ÔÏó¿ÉÒÔ´¥·¢¹æÔòÖ´Ðлò¿ªÊ¼Ò»¸ö¹æÔòÁ÷Ö´ÐС£

1.3. StatefulKnowledgeSessions

StatefulKnowledgeSession ¶ÔÏóÊÇÒ»ÖÖ×î³£ÓõÄÓë¹æÔòÒýÇæ½øÐн»»¥µÄ·½Ê½£¬Ëü¿ÉÒÔÓë¹æÔòÒýÇæ½¨Á¢Ò»¸ö³ÖÐøµÄ½»»¥Í¨µÀ£¬ÔÚÍÆÀí¼ÆËãµÄ¹ý³Ìµ±ÖпÉÄÜ»á¶à´Î´¥·¢Í¬Ò»Êý¾Ý¼¯¡£ÔÚÓû§µÄ´úÂëµ±ÖУ¬×îºóʹÓÃÍêStatefulKnowledgeSession ¶ÔÏóÖ®ºó£¬Ò»¶¨Òªµ÷ÓÃÆädispose()·½·¨ÒÔÊÍ·ÅÏà¹ØÄÚ´æ×ÊÔ´¡£

1.4. StateLessKnowledgeSession

StatelessKnowledgeSession µÄ×÷ÓÃÓëStatefulKnowledgeSession Ïà·Â£¬ËüÃǶ¼ÊÇÓÃÀ´½ÓÊÕÒµÎñÊý¾Ý¡¢Ö´ÐйæÔòµÄ¡£ÊÂʵÉÏ£¬StatelessKnowledgeSession ¶ÔStatefulKnowledgeSession ×öÁ˰ü×°£¬Ê¹µÃÔÚʹÓÃStatelessKnowledgeSession ¶ÔÏóʱ²»ÐèÒªÔÙµ÷ÓÃdispose()·½·¨ÊÍ·ÅÄÚ´æ×ÊÔ´ÁË¡£

ÔÚdrools 6.xÒÔºóÕâЩAPI ¶¼ÕûºÏµ½kie API ÖÐÁË

2. FACT¶ÔÏó

Fact ÊÇÖ¸ÔÚDrools ¹æÔòÓ¦Óõ±ÖУ¬½«Ò»¸öÆÕͨµÄJavaBean ²åÈëµ½¹æÔòµÄWorkingMemoryµ±ÖкóµÄ¶ÔÏó¡£¹æÔò¿ÉÒÔ¶ÔFact ¶ÔÏó½øÐÐÈÎÒâµÄ¶Áд²Ù×÷£¬µ±Ò»¸öJavaBean ²åÈëµ½WorkingMemory µ±Öбä³ÉFact Ö®ºó£¬Fact ¶ÔÏó²»ÊǶÔÔ­À´µÄJavaBean ¶ÔÏó½øÐÐClon£¬¶øÊÇÔ­À´JavaBean ¶ÔÏóµÄÒýÓá£

3. ¹æÔò

3.1¹æÔòÎļþ

ÔÚ Drools µ±ÖУ¬Ò»¸ö±ê×¼µÄ¹æÔòÎļþ¾ÍÊÇÒ»¸öÒÔ¡°.drl¡±½áβµÄÎı¾Îļþ£¬ÓÉÓÚËüÊÇÒ»¸ö±ê×¼µÄÎı¾Îļþ£¬ËùÒÔ¿ÉÒÔͨ¹ýһЩ¼Çʱ¾¹¤¾ß¶ÔÆä½øÐдò¿ª¡¢²é¿´ºÍ±à¼­¡£

¹æÔòÊÇ·ÅÔÚ¹æÔòÎļþµ±Öеģ¬Ò»¸ö¹æÔòÎļþ¿ÉÒÔ´æ·Å¶à¸ö¹æÔò£¬³ý´ËÖ®Í⣬ÔÚ¹æÔòÎļþµ±Öл¹¿ÉÒÔ´æ·ÅÓû§×Ô¶¨ÒåµÄº¯Êý¡¢Êý¾Ý¶ÔÏó¼°×Ô¶¨Òå²éѯµÈÏà¹ØÔÚ¹æÔòµ±ÖпÉÄÜ»áÓõ½µÄһЩ¶ÔÏó¡£³£ÓõÄÓУºpackage package-name¡¢imports¡¢globals¡¢functions¡¢queries¡¢rules

¶ÔÓÚÒ»¸ö¹æÔòÎļþ¶øÑÔ£¬Ê×ÏÈÉùÃ÷package ÊDZØÐëµÄ£¬³ýpackage Ö®Í⣬ÆäËü¶ÔÏóÔÚ¹æÔòÎļþÖеÄ˳ÐòÊÇÈÎÒâµÄ£¬Ò²¾ÍÊÇ˵ÔÚ¹æÔòÎļþµ±ÖбØÐëÒªÓÐÒ»¸öpackage ÉùÃ÷£¬Í¬Ê±package ÉùÃ÷±ØÐëÒª·ÅÔÚ¹æÔòÎļþµÄµÚÒ»ÐС£ÔÚDrools µÄ¹æÔòÎļþµ±ÖÐpackage ¶ÔÓÚ¹æÔòÎļþÖйæÔòµÄ¹ÜÀíÖ»ÏÞÓÚÂß¼­ÉϵĹÜÀí£¬£¬¶ø²»¹ÜÆäÔÚÎïÀíÉϵÄλÖÃÈçºÎ£¬ÕâµãÊǹæÔòÓëJava ÎļþµÄpackage µÄÇø±ð¡£¶ÔÓÚͬһpackage ϵÄÓû§×Ô¶¨Ò庯Êý¡¢×Ô¶¨ÒåµÄ²éѯµÈ£¬²»¹ÜÕâЩº¯ÊýÓë²éѯÊÇ·ñÔÚͬһ¸ö¹æÔòÎļþÀïÃæ£¬ÔÚ¹æÔòÀïÃæÊÇ¿ÉÒÔÖ±½ÓʹÓõģ¬ÕâµãºÍJava µÄͬһpackage ÀïµÄJavaÀàµ÷ÓÃÊÇÒ»ÑùµÄ¡£

3.2 ¹æÔòÓïÑÔ

rule "name"
attributes
when
LHS
Then
RHS
end

Ò»¸ö¹æÔòͨ³£°üÀ¨Èý¸ö²¿·Ö£ºÊôÐÔ²¿·Ö£¨attribute£©¡¢Ìõ¼þ²¿·Ö£¨LHS£©ºÍ½á¹û²¿·Ö£¨RHS£©¡£¶ÔÓÚÒ»¸öÍêÕûµÄ¹æÔòÀ´Ëµ£¬ÕâÈý¸ö²¿·Ö¶¼ÊÇ¿ÉÑ¡µÄ£¬Ò²¾ÍÊÇ˵ÈçÏ ËùʾµÄ¹æÔòÊǺϷ¨µÄ£º

rule "name"
when
then
end

3.3 Ìõ¼þ²¿·Ö

Ìõ¼þ²¿·ÖÓÖ±»³ÆÖ®ÎªLeft Hand Side£¬¼ò³ÆÎªLHS£¬ÏÂÎĵ±ÖУ¬Èç¹ûûÓÐÌØ±ðÖ¸³ö£¬ÄÇôËù˵µÄLHS ¾ùÖ¸¹æÔòµÄÌõ¼þ²¿·Ö£¬ÔÚÒ»¸ö¹æÔòµ±ÖÐwhen Óëthen ÖмäµÄ²¿·Ö¾ÍÊÇLHS ²¿·Ö¡£ÔÚLHS µ±ÖУ¬¿ÉÒÔ°üº¬0~n ¸öÌõ¼þ£¬Èç¹ûLHS ²¿·Öû¿ÕµÄ»°£¬ÄÇôÒýÇæ»á×Ô¶¯Ìí¼ÓÒ»¸öeval(true)µÄÌõ¼þ£¬ÓÉÓÚ¸ÃÌõ¼þ×ÜÊÇ·µ»Øtrue£¬ËùÒÔLHS Ϊ¿ÕµÄ¹æÔò×ÜÊÇ·µ»Øtrue¡£LHS ²¿·ÖÊÇÓÉÒ»¸ö»ò¶à¸öÌõ¼þ×é³É£¬Ìõ¼þÓÖ³ÆÖ®Îªpattern£¨Æ¥Åäģʽ£©£¬¶à¸öpatternÖ®¼äÓÿÉÒÔʹÓÃand »òor À´½øÐÐÁ¬½Ó£¬Í¬Ê±»¹¿ÉÒÔʹÓÃСÀ¨ºÅÀ´È·¶¨pattern µÄÓÅÏȼ¶¡£

Ò»¸öpattern µÄÓï·¨ÈçÏ£º

[°ó¶¨±äÁ¿Ãû£º]Object([field Ô¼Êø])

¶ÔÓÚÒ»¸öpattern À´Ëµ¡°°ó¶¨±äÁ¿Ãû¡±ÊÇ¿ÉÑ¡µÄ£¬Èç¹ûÔÚµ±Ç°¹æÔòµÄLHS ²¿·ÖµÄÆäËüµÄpattern ÒªÓõ½Õâ¸ö¶ÔÏó£¬ÄÇô¿ÉÒÔͨ¹ýΪ¸Ã¶ÔÏóÉ趨һ¸ö°ó¶¨±äÁ¿ÃûÀ´ÊµÏÖ¶ÔÆäÒýÓ㬶ÔÓڰ󶨱äÁ¿µÄÃüÃû£¬Í¨³£µÄ×÷·¨ÊÇΪÆäÌí¼ÓÒ»¸ö¡°$¡±·ûºÅ×÷Ϊǰ׺£¬ÕâÑù¿ÉÒԺܺõÄÓëFactµÄÊôÐÔÇø±ð¿ªÀ´£»°ó¶¨±äÁ¿²»½ö¿ÉÒÔÓÃÔÚ¶ÔÏóÉÏ£¬Ò²¿ÉÒÔÓÃÔÚ¶ÔÏóµÄÊôÐÔÉÏÃæ£¬ÃüÃû·½·¨Óë¶ÔÏóµÄÃüÃû·½·¨Ïàͬ£»¡°field Ô¼Êø¡±ÊÇÖ¸µ±Ç°¶ÔÏóÀïÏà¹Ø×ֶεÄÌõ¼þÏÞÖÆ£¬Ê¾ÀýÈçÏ£º

rule "rule1"
when
$customer:Customer(age>20,gender==¡¯male¡¯)
Order(customer==$customer,price>1000)
then
<action>¡­
End

´Ë¶Î¹æÔòµÄº¬ÒåΪ£ºµÄ¹æÔò¾Í°üº¬Á½¸öpattern£¬µÚÒ»¸öpattern ÓÐÈý¸öÔ¼Êø£¬·Ö±ðÊÇ£º¶ÔÏóÀàÐͱØÐëÊÇCutomer£»Í¬Ê±Cutomer µÄage Òª´óÓÚ20 ÇÒgender ÒªÊÇmale£»µÚ¶þ¸öpattern Ò²ÓÐÈý¸öÔ¼Êø£¬·Ö±ðÊÇ£º¶ÔÏóÀàÐͱØÐëÊÇOrder£¬Í¬Ê±Order ¶ÔÓ¦µÄCutomer ±ØÐëÊÇÇ°ÃæµÄÄǸöCustomer ÇÒµ±Ç°Õâ¸öOrder µÄprice Òª´óÓÚ1000¡£ÔÚÕâÁ½¸öpattern ûÓзûºÅÁ¬½Ó£¬ÔÚDroolsµ±ÖÐÔÚpattern ÖÐûÓÐÁ¬½Ó·ûºÅ£¬ÄÇô¾ÍÓÃand À´×÷ΪĬÈÏÁ¬½Ó£¬ËùÒÔÔڸùæÔòµÄLHS ²¿·ÖÖÐÁ½¸öpattern Ö»Óж¼Âú×ãÁ˲Ż᷵»Øtrue¡£Ä¬ÈÏÇé¿öÏ£¬Ã¿ÐпÉÒÔÓá°;¡±À´×÷Ϊ½áÊø·û£¨ºÍJava µÄ½áÊøÒ»Ñù£©£¬µ±È»ÐÐβҲ¿ÉÒÔ²»¼Ó¡°;¡±½áβ¡£

3.3.1Ô¼ÊøÁ¬½Ó

¶ÔÓÚ¶ÔÏóÄÚ²¿µÄ¶à¸öÔ¼ÊøµÄÁ¬½Ó£¬¿ÉÒÔ²ÉÓá°&&¡±£¨and£©¡¢¡°||¡±(or)ºÍ¡°,¡±(and)À´ÊµÏÖ£¬¡°&&¡±£¨and£©¡¢¡°||¡±(or)ºÍ¡°,¡±ÕâÈý¸öÁ¬½Ó·ûºÅÈç¹ûûÓÐÓÃСÀ¨ºÅÀ´ÏÔʾµÄ¶¨ÒåÓÅÏȼ¶µÄ»°£¬ÄÇôËüÃǵÄÖ´ÐÐ˳ÐòÊÇ£º¡°&&¡±£¨and£©¡¢¡°||¡±(or)ºÍ¡°,¡± ¡°&&¡±ÓÅÏȼ¶×î¸ß£¬±íÃæÉÏ¿´¡°,¡±Óë¡°&&¡±¾ßÓÐÏàͬµÄº¬Ò壬µ«ÊÇÓÐÒ»µãÐèҪעÒ⣬¡°£¬¡±Óë¡°&&¡±ºÍ¡°||¡±²»ÄÜ»ìºÏʹÓã¬Ò²¾ÍÊÇ˵ÔÚÓС°&&¡±»ò¡°||¡±³öÏÖµÄLHS µ±ÖУ¬ÊDz»¿ÉÒÔÓС°£¬¡±Á¬½Ó·û³ö

Ïֵ쬷´Ö®ÒàÈ»¡£

3.3.2 ±È½Ï²Ù×÷·û

ÔÚµ±Öй²ÌṩÁËÊ®¶þÖÖÀàÐ͵ıȽϲÙ×÷·û£¬·Ö±ðÊÇ£º>¡¢>=¡¢<¡¢<=¡¢= =¡¢!=¡¢contains¡¢not contains¡¢memberof¡¢not memberof¡¢matches¡¢not matches£»ÔÚÕâÊ®¶þÖÖÀàÐ͵ıȽϲÙ×÷·ûµ±ÖУ¬Ç°Áù¸öÊDZȽϳ£¼ûÒ²ÊÇÓõıȽ϶àµÄ±È½Ï²Ù×÷·û£¬×ÅÖØ¶ÔºóÁùÖÖÀàÐ͵ıȽϲÙ×÷·û½øÐнéÉÜ¡£

3.3.2.1 contains

±È½Ï²Ù×÷·ûcontains ÊÇÓÃÀ´¼ì²éÒ»¸öFact ¶ÔÏóµÄij¸ö×ֶΣ¨¸Ã×Ö¶ÎÒªÊÇÒ»¸öCollection»òÊÇÒ»¸öArray ÀàÐ͵ĶÔÏó£©ÊÇ·ñ°üº¬Ò»¸öÖ¸¶¨µÄ¶ÔÏó¡£

when
$order:Order();
$customer:Customer(age >20, orders contains $order);
then
System.out.println($customer.getName());
End

contains Ö»ÄÜÓÃÓÚ¶ÔÏóµÄij¸öCollection/Array ÀàÐ͵Ä×Ö¶ÎÓëÁíÍâÒ»¸öÖµ½øÐбȽϣ¬×÷Ϊ±È½ÏµÄÖµ¿ÉÒÔÊÇÒ»¸ö¾²Ì¬µÄÖµ£¬Ò²¿ÉÒÔÊÇÒ»¸ö±äÁ¿(°ó¶¨±äÁ¿»òÕßÊÇÒ»¸öglobal ¶ÔÏó)¡£

3.3.2.2 not contains

not contains ×÷ÓÃÓëcontains ×÷ÓÃÏà·´£¬not contains ÊÇÓÃÀ´ÅжÏÒ»¸öFact ¶ÔÏóµÄij¸ö×ֶΣ¨Collection/Array ÀàÐÍ£©ÊDz»ÊDz»°üº¬Ò»¸öÖ¸¶¨µÄ¶ÔÏ󣬺Ícontains ±È½Ï·ûÏàͬ£¬ËüÒ²Ö»ÄÜÓÃÔÚ¶ÔÏóµÄfield µ±ÖС£

3.3.2.3 memberOf

memberOf ÊÇÓÃÀ´ÅжÏij¸öFact ¶ÔÏóµÄij¸ö×Ö¶ÎÊÇ·ñÔÚÒ»¸ö¼¯ºÏ£¨Collection/Array£©µ±ÖУ¬Ó÷¨Óëcontains ÓÐЩÀàËÆ£¬µ«Ò²Óв»Í¬£¬memberOf µÄÓï·¨ÈçÏ£ºObject(fieldName memberOf value[Collection/Array])¿ÉÒÔ¿´µ½memberOf Öм¯ºÏÀàÐ͵ÄÊý¾ÝÊÇ×÷Ϊ±»±È½ÏÏîµÄ£¬¼¯ºÏÀàÐ͵ÄÊý¾Ý¶ÔÏóλÓÚmemberOf ²Ù×÷·ûºóÃæ£¬Í¬Ê±ÔÚÓÃmemberOf ±È½Ï²Ù×÷·ûʱ±»±È½ÏÏîÒ»¶¨ÒªÊÇÒ»¸ö±äÁ¿(°ó¶¨±äÁ¿»òÕßÊÇÒ»¸öglobal ¶ÔÏó)£¬¶ø²»ÄÜÊÇÒ»¸ö¾²Ì¬Öµ¡£

3.3.2.4 not memberOf

¸Ã²Ù×÷·ûÓëmemberOf ×÷ÓÃǢǢÏà·´£¬ÊÇÓÃÀ´ÅжÏFact ¶ÔÏóµ±ÖÐij¸ö×Ö¶ÎÖµÊDz»ÊÇÖÐij¸ö¼¯ºÏ£¨Collection/Array£©µ±ÖУ¬Í¬Ê±±»±È½ÏµÄ¼¯ºÏ¶ÔÏóÖ»ÄÜÊÇÒ»¸ö±äÁ¿£¨°ó¶¨±äÁ¿»òglobal¶ÔÏ󣩡£

3.3.2.5 matches

matches ÊÇÓÃÀ´¶Ôij¸öFact µÄ×Ö¶ÎÓë±ê×¼µÄJava ÕýÔò±í´ïʽ½øÐÐÏàËÆÆ¥Å䣬±»±È½ÏµÄ×Ö·û´®¿ÉÒÔÊÇÒ»¸ö±ê×¼µÄJava ÕýÔò±í´ïʽ£¬µ«ÓÐÒ»µãÐèҪעÒ⣬ÄǾÍÊÇÕýÔò±í´ïʽ×Ö·û´®µ±Öв»Óÿ¼ÂÇ¡°\¡±µÄתÒåÎÊÌâ

when
$customer:Customer(name matches "Àî.*");
then
System.out.println($customer.getName());
end

¸Ã¹æÔòÊÇÓÃÀ´²éÕÒËùÓÐCustomer ¶ÔÏóµÄname ÊôÐÔÊDz»ÊÇÒÔ¡°À×Ö¿ªÍ·£¬Èç¹ûÂú×ãÕâÒ»Ìõ¼þÄÇô¾Í½«¸ÃCustomer ¶ÔÏóµÄname ÊôÐÔ´òÓ¡³öÀ´¡£

3.3.2.6 not matches

Óëmatches ×÷ÓÃÏà·´£¬ÊÇÓÃÀ´½«Ä³¸öFact µÄ×Ö¶ÎÓëÒ»¸öJava ±ê×¼ÕýÔò±í´ïʽ½øÐÐÆ¥Å䣬¿´ÊDz»ÊÇÄÜÓëÕýÔò±í´ïʽƥÅä¡£not matches ʹÓÃÓï·¨ÈçÏ£º

Object(fieldname not matches ¡°ÕýÔò±í´ïʽ¡±)

Object(fieldname not matches ¡°ÕýÔò±í´ïʽ¡±)

3.4 ½á¹û²¿·Ö

½á¹û²¿·ÖÓÖ±»³ÆÖ®ÎªRight Hand Side£¬¼ò³ÆÎªRHS£¬ÔÚÒ»¸ö¹æÔòµ±ÖÐthen ºóÃæ²¿·Ö¾ÍÊÇRHS£¬Ö»ÓÐÔÚLHS µÄËùÓÐÌõ¼þ¶¼Âú×ãʱRHS ²¿·Ö²Å»áÖ´ÐС£

RHS ²¿·ÖÊǹæÔòÕæÕýÒª×öÊÂÇéµÄ²¿·Ö£¬¿ÉÒÔ½«ÒòÌõ¼þÂú×ã¶øÒª´¥·¢µÄ¶¯×÷дÔڸò¿·Öµ±ÖУ¬ÔÚRHS µ±ÖпÉÒÔʹÓÃLHS ²¿·Öµ±Öж¨ÒåµÄ°ó¶¨±äÁ¿Ãû¡¢ÉèÖõÄÈ«¾Ö±äÁ¿¡¢»òÕßÊÇÖ±½Ó±àдJava ´úÂ루¶ÔÓÚÒªÓõ½µÄJava À࣬ÐèÒªÔÚ¹æÔòÎļþµ±ÖÐÓÃimport ½«ÀർÈëºó·½ÄÜʹÓã¬ÕâµãºÍJava ÎļþµÄ±àд¹æÔòÏàͬ£©¡£

ÔÚ¹æÔòµ±ÖÐLHS ¾ÍÊÇÓÃÀ´·ÅÖÃÌõ¼þµÄ£¬ËùÒÔÔÚRHS µ±ÖÐËäÈ»¿ÉÒÔÖ±½Ó±àдJava ´úÂ룬µ«²»½¨ÒéÔÚ´úÂëµ±ÖÐÓÐÌõ¼þÅжϣ¬Èç¹ûÐèÒªÌõ¼þÅжϣ¬ÄÇôÇëÖØÐ¿¼Âǽ«Æä·ÅÔÚLHS µ±ÖУ¬·ñÔò¾ÍÎ¥±³ÁËʹÓùæÔòµÄ³õÖÔ¡£

ÔÚ Drools µ±ÖУ¬ÔÚRHS ÀïÃæ£¬ÌṩÁËһЩ¶Ôµ±Ç°Working Memory ʵÏÖ¿ìËÙ²Ù×÷µÄºêº¯Êý»òºê¶ÔÏ󣬱ÈÈçinsert/insertLogical¡¢update ºÍretract ¾Í¿ÉÒÔʵÏÖ¶Ôµ±Ç°Working MemoryÖеÄFact ¶ÔÏó½øÐÐÐÂÔö¡¢É¾³ý»òÕßÊÇÐÞ¸Ä.

3.4.1 insert

insert(new Object());

Ò»µ©µ÷ÓÃinsert ºêº¯Êý£¬ÄÇôDrools »áÖØÐÂÓëËùÓеĹæÔòÔÙÖØÐÂÆ¥ÅäÒ»´Î£¬¶ÔÓÚûÓÐÉèÖÃno-loop ÊôÐÔΪtrue µÄ¹æÔò£¬Èç¹ûÌõ¼þÂú×㣬²»¹ÜÆä֮ǰÊÇ·ñÖ´Ðйý¶¼»áÔÙÖ´ÐÐÒ»´Î£¬Õâ¸öÌØÐÔ²»½ö´æÔÚÓÚinsert ºêº¯ÊýÉÏ£¬ºóÃæ½éÉܵÄupdate¡¢retract ºêº¯ÊýͬÑù¾ßÓиÃÌØÐÔ£¬ËùÒÔÔÚijЩÇé¿öÏÂÒò¿¼ÂDz»Öܵ÷ÓÃinsert¡¢update »òretractÈÝÒ×·¢ÉúËÀÑ­»·£¬Õâµã´ó¼ÒÐèҪעÒâ.

when
eval(true);
then
Customer cus=new Customer();
cus.setName("ÕÅÈý");
insert(cus);
end

3.4.2 update

update º¯ÊýÒâÒåÓëÆäÃû³ÆÒ»Ñù£¬ÓÃÀ´ÊµÏÖ¶Ôµ±Ç°Working Memory µ±ÖеÄFact ½øÐиüУ¬update ºêº¯ÊýµÄ×÷ÓÃÓëStatefulSession ¶ÔÏóµÄupdate ·½·¨µÄ×÷Óûù±¾Ïàͬ£¬¶¼ÊÇÓÃÀ´¸æËßµ±Ç°µÄWorking Memory ¸ÃFact ¶ÔÏóÒѾ­·¢ÉúÁ˱仯¡£

when
$customer:Customer(name=="ÕÅÈý",age<10);
then
$customer.setAge($customer.getAge()+1);
update($customer);
System.out.println("----------"+$customer.getName());
End

3.4.3 retract

retract ÓÃÀ´½«Working Memory µ±ÖÐij¸öFact ¶ÔÏó´ÓWorking Memory µ±ÖÐɾ³ý£¬ÏÂÃæ¾Íͨ¹ýÒ»¸öÀý×ÓÀ´ËµÃ÷retract ºêº¯ÊýµÄÓ÷¨¡£

retract($customer);

3.4.4 modify

modify ÊÇÒ»¸ö±í´ïʽ¿é£¬Ëü¿ÉÒÔ¿ìËÙʵÏÖ¶ÔFact ¶ÔÏó¶à¸öÊôÐÔ½øÐÐÐ޸ģ¬ÐÞ¸ÄÍê³Éºó»á×Ô¶¯¸üе½µ±Ç°µÄWorking Memory µ±ÖС£ËüµÄ»ù±¾Óï·¨¸ñʽÈçÏ£º

modify(fact-expression){
<ÐÞ¸ÄFact ÊôÐԵıí´ïʽ>[,<ÐÞ¸ÄFact ÊôÐԵıí´ïʽ>*]
}

ʾÀý

when
$customer:Customer(name=="ÕÅÈý",age==20);
then
System.out.println("modify before customer
id:"+$customer.getId()+";age:"+$customer.getAge());
modify($customer){
setId("super man"),
setAge(30)
}
End

ÕâÀïÓÐÒ»µãÐèҪעÒ⣬ÄǾÍÊǺÍinsert¡¢update¡¢retract ¶ÔWorking Memory µÄ²Ù×÷Ò»Ñù£¬Ò»µ©Ê¹ÓÃÁËmodify ¿é¶Ôij¸öFact µÄÊôÐÔ½øÐÐÁËÐ޸ģ¬ÄÇô»áµ¼ÖÂÒýÇæÖØÐ¼ì²éËùÓйæÔòÊÇ·ñÆ¥ÅäÌõ¼þ£¬¶ø²»¹ÜÆä֮ǰÊÇ·ñÖ´Ðйý¡£

3.5 ÊôÐÔ²¿·Ö

¹æÔòÊôÐÔÊÇÓÃÀ´¿ØÖƹæÔòÖ´ÐеÄÖØÒª¹¤¾ß£¬ÔÚ¹æÔòµÄÊôÐÔ¹²ÓÐ13 ¸ö£¬ËüÃÇ·Ö±ðÊÇ£ºactivation-group¡¢agenda-group¡¢

auto-focus¡¢date-effective¡¢date-expires¡¢dialect¡¢duration¡¢enabled¡¢lock-on-active¡¢no-loop¡¢ruleflow-group¡¢salience¡¢when£¬ÕâЩÊôÐÔ·Ö±ðÊÊÓÃÓÚ²»Í¬µÄ³¡¾°£¬ÏÂÃæÎÒÃǾÍÀ´·Ö±ð½éÉÜÕâЩÊôÐԵĺ¬Òå¼°Ó÷¨¡£

3.5.1 salience

ÓÃÀ´ÉèÖùæÔòÖ´ÐеÄÓÅÏȼ¶£¬salience ÊôÐÔµÄÖµÊÇÒ»¸öÊý×Ö£¬Êý×ÖÔ½´óÖ´ÐÐÓÅÏȼ¶Ô½¸ß£¬Í¬Ê±ËüµÄÖµ¿ÉÒÔÊÇÒ»¸ö¸ºÊý¡£Ä¬ÈÏÇé¿öÏ£¬¹æÔòµÄssalience ĬÈÏֵΪ0£¬ËùÒÔÈç¹ûÎÒÃDz»ÊÖ¶¯ÉèÖùæÔòµÄsalience ÊôÐÔ£¬ÄÇôËüµÄÖ´ÐÐ˳ÐòÊÇËæ»ú£¨µ«ÊÇÒ»°ã¶¼Êǰ´ÕÕ¼ÓÔØË³Ðò¡££©

rule "rule1"
salience 1
when
eval(true)
then
System.out.println("rule1");
End

3.5.2 no-loop

no-loop ÊôÐÔµÄ×÷ÓÃÊÇÓÃÀ´¿ØÖÆÒѾ­Ö´ÐйýµÄ¹æÔòÔÚÌõ¼þÔÙ´ÎÂú×ãʱÊÇ·ñÔÙ´ÎÖ´ÐС£Ä¬ÈÏÇé¿öϹæÔòµÄno-loopÊôÐÔµÄֵΪfalse£¬Èç¹ûno-loop ÊôÐÔֵΪtrue£¬ÄÇô¾Í±íʾ¸Ã¹æÔòÖ»»á±»ÒýÇæ¼ì²éÒ»´Î£¬

no-loop ÊÇ ¶ÔÓÚ×Ô¼º¹æÔòµÄ²Ù×÷ÒýÆðÖØÐÂÆ¥Å䣬ִֻÐÐÒ»´Î¡£ÓÉÓÚÆäËû¹æÔòµÄ²Ù×÷ÒýÆðµÄÖØÐÂÆ¥Åä»áÖ´ÐÐÒ»´Î¡£ËùÒÔÈç¹ûÓÐÁ½¸ö

¹æÔò¶¼ÊÇÒ»Ö±Âú×ãÌõ¼þ£¬ÇÒthen ÖÐÓÐupdate ²Ù×÷£¨ÈçÏÂÀý×Ó£©¡£ÄÇô½«»á½øÈëËÀÑ­»·£¬´ËʱӦ¸ÃʹÓà lock-on-active ÊôÐÔ±£Ö¤Ö»Æ¥ÅäÒ»´Î¡£

rule "rule1"
salience 1
no-loop true
when
$customer:Customer(name=="ÕÅÈý")
then
update($customer);
System.out.println("customer name:"+$customer.getName());
End

3.5.3 date-effective

¿ØÖƹæÔòÖ»ÓÐÔÚµ½´ïºó²Å»á´¥·¢¡£Ö»Óе±ÏµÍ³Ê±¼ä>=date-effective ÉèÖõÄʱ¼äֵʱ£¬¹æÔò²Å»á´¥·¢Ö´ÐУ¬·ñÔòÖ´Ðн«²»Ö´ÐС£ÔÚûÓÐÉèÖøÃÊôÐÔµÄÇé¿öÏ£¬¹æÔòËæÊ±¿ÉÒÔ´¥·¢£¬Ã»ÓÐÕâÖÖÏÞÖÆ¡£

date-effective ¿É½ÓÊܵÄÈÕÆÚ¸ñʽΪ¡°dd-MMM-yyyy¡±£¬ÀýÈç2009 Äê9 ÔÂ25 ÈÕ

Èç¹ûÄúµÄ²Ù×÷ϵͳΪÖÐÎĵģ¬ÄÇôӦ¸Ãд³É¡°25-Sep-2009¡±£»Èç¹ûÊÇÓ¢ÎIJÙ×÷ϵͳ¡°25-¾ÅÔÂ-2009¡±

rule "rule1"
date-effective " 25-¾ÅÔÂ-2009"
when
eval(true);
then
System.out.println("rule1 is execution!");
End

3.5.4 date-expires

¸ÃÊôÐÔµÄ×÷ÓÃÓëdate-effective ÊôÐÔǡǡÏà·´£¬ date-expires µÄ×÷ÓÃÊÇÓÃÀ´ÉèÖùæÔòµÄÓÐЧÆÚ¡£Èç¹ûdate-expires µÄÖµ´óÓÚϵͳʱ¼ä£¬ÄÇô¹æÔò¾ÍÖ´ÐУ¬·ñÔò¾Í²»Ö´ÐС£

¾ßÌåÓ÷¨Óëdate-effective ÊôÐÔÏàͬ¡£

3.5.5 enabled

enabled ÊôÐԱȽϼòµ¥£¬ËüÊÇÓÃÀ´¶¨ÒåÒ»¸ö¹æÔòÊÇ·ñ¿ÉÓõġ£¸ÃÊôÐÔµÄÖµÊÇÒ»¸ö²¼¶ûÖµ£¬Ä¬ÈϸÃÊôÐÔµÄֵΪtrue£¬±íʾ¹æÔòÊÇ¿ÉÓõģ¬Èç¹ûÊÖ¹¤ÎªÒ»¸ö¹æÔòÌí¼ÓÒ»¸öenabled ÊôÐÔ£¬²¢ÇÒÉèÖÃÆäenabled ÊôÐÔֵΪfalse£¬ÄÇôÒýÇæ¾Í²»»áÖ´ÐиùæÔò¡£

3.5.6 dialect

¸ÃÊôÐÔÓÃÀ´¶¨Ò广Ôòµ±ÖÐҪʹÓõÄÓïÑÔÀàÐÍ£¬Ä¿Ç°Drools °æ±¾µ±ÖÐÖ§³ÖÁ½ÖÖÀàÐ͵ÄÓïÑÔ£ºmvel ºÍjava£¬Ä¬ÈÏÇé¿öÏ£¬Èç¹ûûÓÐÊÖ¹¤ÉèÖùæÔòµÄdialect£¬ÄÇôʹÓõÄjava ÓïÑÔ¡£

3.5.7 duration

Èç¹ûÉèÖÃÁ˸ÃÊôÐÔ£¬ÄÇô¹æÔò½«ÔÚ¸ÃÊôÐÔÖ¸¶¨µÄÖµÖ®ºóÔÚÁíÍâÒ»¸öÏß³ÌÀï´¥·¢¡£¸ÃÊôÐÔ¶ÔÓ¦µÄֵΪһ¸ö³¤ÕûÐÍ£¬µ¥Î»ÊǺÁÃë.

rule "rule1"
duration 3000
when
eval(true)
then
System.out.println("rule thread
id:"+Thread.currentThread().getId());
end

±íʾ¸Ã¹æÔò½«ÔÚ3000 ºÁÃëÖ®ºóÔÚÁíÍâÒ»¸öÏß³ÌÀï´¥·¢¡£

5.8 lock-on-active

È·ÈϹæÔòÖ»Ö´ÐÐÒ»´Î¡£ ½«lock-on-action ÊôÐÔµÄÖµÉèÖÃΪtrue£¬¿ÉÄܱÜÃâÒòijЩFact ¶ÔÏó±»Ð޸ĶøÊ¹ÒѾ­Ö´ÐйýµÄ¹æÔòÔٴα»¼¤»îÖ´ÐС£lock-on-active ÊÇno-loop µÄÔöÇ¿°æÊôÐÔ¡£lock-on-active ÊôÐÔĬÈÏֵΪfalse¡£

5.9 activation-group

¸ÃÊôÐÔµÄ×÷ÓÃÊǽ«Èô¸É¸ö¹æÔò»®·Ö³ÉÒ»¸ö×飬ÓÃÒ»¸ö×Ö·û´®À´¸øÕâ¸ö×éÃüÃû£¬ÕâÑùÔÚÖ´ÐеÄʱºò£¬¾ßÓÐÏàͬactivation-group ÊôÐԵĹæÔòÖÐÖ»ÒªÓÐÒ»¸ö»á±»Ö´ÐУ¬ÆäËüµÄ¹æÔò¶¼½«²»ÔÙÖ´ÐС£

ÔÚÒ»×é¾ßÓÐÏàͬactivation-group ÊôÐԵĹæÔòµ±ÖУ¬Ö»ÓÐÒ»¸ö¹æÔò»á±»Ö´ÐУ¬ÆäËü¹æÔò¶¼½«²»»á±»Ö´ÐС£µ±È»¶ÔÓÚ¾ßÓÐÏàͬactivation-group ÊôÐԵĹæÔòµ±Öо¿¾¹ÄÄÒ»¸ö»áÏÈÖ´ÐУ¬Ôò¿ÉÒÔÓÃÀàËÆsalience Ö®ÀàÊôÐÔÀ´ÊµÏÖ¡£

rule "rule1"
activation-group "test"
when
eval(true)
then
System.out.println("rule1 execute");
end

rule "rule 2"
activation-group "test"
when
eval(true)
then
System.out.println("rule2 execute");
End

rule1 ºÍrule2 ÕâÁ½¸ö¹æÔòÒòΪ¾ßÌåÏàͬÃû³ÆµÄactivation-group ÊôÐÔ£¬ËùÒÔËüÃÇÖ»ÓÐÒ»¸ö»á±»Ö´ÐС£

3.5.10 agenda-group

Agenda Group ÊÇÓÃÀ´ÔÚAgenda µÄ»ù´¡Ö®ÉÏ£¬¶ÔÏÖÔڵĹæÔò½øÐÐÔٴηÖ×飬¾ßÌåµÄ·Ö×é·½·¨¿ÉÒÔ²ÉÓÃΪ¹æÔòÌí¼Óagenda-group ÊôÐÔÀ´ÊµÏÖ¡£

agenda-group ÊôÐÔµÄÖµÒ²ÊÇÒ»¸ö×Ö·û´®£¬Í¨¹ýÕâ¸ö×Ö·û´®£¬¿ÉÒÔ½«¹æÔò·ÖΪÈô¸É¸öAgenda Group£¬Ä¬ÈÏÇé¿öÏ£¬ÒýÇæÔÚµ÷ÓÃÕâЩÉèÖÃÁËagenda-group ÊôÐԵĹæÔòµÄʱºòÐèÒªÏÔʾµÄÖ¸¶¨Ä³¸öAgenda Group µÃµ½Focus£¨½¹µã£©£¬ÕâÑùλÓÚ¸ÃAgenda Group µ±ÖеĹæÔò²Å»á´¥·¢Ö´ÐУ¬·ñÔò½«²»Ö´ÐС£

rule "rule1"
agenda-group "001"
when
eval(true)
then
System.out.println("rule1 execute");
end

rule "rule 2"
agenda-group "002"
when
eval(true)
then
System.out.println("rule2 execute");
End

java ´úÂë

on »ñÈ¡KieSession µÄ·½·¨×Ô¼ºÐ´µÄ¡£
KieSession ks = getSession();
//ÉèÖÃagenda-group µÄauto-focus ʹÆäÖ´ÐÐ ks.getAgenda().getAgendaGroup("group1").setFocus();

Ç°ÃæÎÒÃÇÒ²Ìáµ½auto-focus ÊôÐÔ£¬ËüµÄ×÷ÓÃÊÇÓÃÀ´ÔÚÒÑÉèÖÃÁËagenda-group µÄ¹æÔòÉÏÉèÖøùæÔòÊÇ·ñ¿ÉÒÔ×Ô¶¯¶ÀÈ¡Focus£¬Èç¹û¸ÃÊôÐÔÉèÖÃΪtrue£¬ÄÇôÔÚÒýÇæÖ´ÐÐʱ£¬¾Í²»ÐèÒªÏÔʾµÄΪij¸öAgenda Group ÉèÖÃFocus£¬·ñÔòÐèÒª¡£

¶ÔÓÚ¹æÔòµÄÖ´ÐеĿØÖÆ£¬»¹¿ÉÒÔʹÓÃAgenda Filter À´ÊµÏÖ¡£ÔÚDrools µ±ÖУ¬ÌṩÁËÒ»¸öÃûΪorg.drools.runtime.rule.AgendaFilter µÄAgenda Filter ½Ó¿Ú£¬Óû§¿ÉÒÔʵÏָýӿڣ¬Í¨¹ý¹æÔòµ±ÖеÄijЩÊôÐÔÀ´¿ØÖƹæÔòÒª²»ÒªÖ´ÐС£org.drools.runtime.rule.AgendaFilter ½Ó¿ÚÖ»ÓÐÒ»¸ö·½·¨ÐèҪʵÏÖ£¬·½·¨ÌåÈçÏ£º

public boolean accept(Activation activation);

Ôڸ÷½·¨µ±ÖÐÌṩÁËÒ»¸öActivation ²ÎÊý£¬Í¨¹ý¸Ã²ÎÊýÎÒÃÇ¿ÉÒԵõ½µ±Ç°ÕýÔÚÖ´ÐеĹæÔò¶ÔÏó»òÆäËüһЩÊôÐÔ£¬¸Ã·½·¨Òª·µ»ØÒ»¸ö²¼¶ûÖµ£¬¸Ã²¼¶ûÖµ¾Í¾ö¶¨ÁËÒª²»ÒªÖ´Ðе±Ç°Õâ¸ö¹æÔò£¬·µ»Øtrue ¾ÍÖ´ÐйæÔò£¬·ñÔò¾Í²»Ö´ÐС£

ÔÚÒýÇæÖ´ÐйæÔòµÄʱºò£¬ÎÒÃÇÏ£ÍûʹÓùæÔòÃûÀ´¶ÔÒªÖ´ÐеĹæÔò×öÒ»¸ö¹ýÂË£¬´Ëʱ¾Í¿ÉÒÔͨ¹ýAgendaFilter À´ÊµÏÖ£¬Ê¾Àý´úÂë¼ÈΪÎÒÃÇʵÏÖµÄÒ»¸öAgendaFilter ÀàÔ´Âë¡£

import org.drools.runtime.rule.Activation;
import org.drools.runtime.rule.AgendaFilter;
public class TestAgendaFilter implements AgendaFilter {
private String startName;
public TestAgendaFilter(String startName){
this.startName=startName;
}
public boolean accept(Activation activation) {
String ruleName=activation.getRule().getName();
if(ruleName.startsWith(this.startName)){
return true;
}else{
return false;
}
}
}

´ÓʵÏÖÀàÖпÉÒÔ¿´µ½£¬ÎÒÃDzÉÓõĹýÂË·½·¨ÊǹæÔòÃûµÄǰ׺£¬Í¨¹ýActivation µÃµ½µ±Ç°µÄRule ¶ÔÏó£¬È»ºóµÃµ½µ±Ç°¹æÔòµÄname£¬ÔÙÓÃÕâ¸öname Óë¸ø¶¨µÄname ǰ׺½øÐбȽϣ¬Èç¹ûÏàͬ¾Í·µ»Øtrue£¬·ñÔò¾Í·µ»Øfalse¡£

java Öе÷ÓÃ

TestAgendaFilter filter= new TestAgendaFilter("activa");
int count = ks.fireAllRules(filter);

3.5.12 ruleflow-group

ÔÚʹÓùæÔòÁ÷µÄʱºòÒªÓõ½ruleflow-group ÊôÐÔ£¬¸ÃÊôÐÔµÄֵΪһ¸ö×Ö·û´®£¬×÷ÓÃÊÇÓÃÀ´½«¹æÔò»®·ÖΪһ¸ö¸öµÄ×飬ȻºóÔÚ¹æÔòÁ÷µ±ÖÐͨ¹ýʹÓÃruleflow-group ÊôÐÔµÄÖµ£¬´Ó¶øÊ¹ÓöÔÓ¦µÄ¹æÔò¡£

4. º¯Êý

º¯ÊýÊǶ¨ÒåÔÚ¹æÔòÎļþµ±ÖÐÒ»´úÂë¿é£¬×÷ÓÃÊǽ«ÔÚ¹æÔòÎļþµ±ÖÐÈô¸É¸ö¹æÔò¶¼»áÓõ½µÄÒµÎñ²Ù×÷·â×°ÆðÀ´£¬ÊµÏÖÒµÎñ´úÂëµÄ¸´Ó㬼õÉÙ¹æÔò±àдµÄ¹¤×÷Á¿¡£º¯ÊýµÄ±àдλÖÿÉÒÔÊǹæÔòÎļþµ±ÖÐpackage ÉùÃ÷ºóµÄÈκεط½£¬Drools µ±Öк¯ÊýÉùÃ÷¡£

function void/Object functionName(Type arg...) {
/*º¯ÊýÌåµÄÒµÎñ´úÂë*/
}

Drools µ±Öеĺ¯ÊýÒÔfunction ±ê¼Ç¿ªÍ·£¬Èç¹ûº¯ÊýÌåûÓзµ»ØÖµ£¬ÄÇôfunction ºóÃæ¾ÍÊÇvoid£¬Èç¹ûÓзµ»ØÖµÕâÀïµÄvoid Òª»»³É¶ÔÓ¦µÄ·µ»ØÖµ¶ÔÏ󣬽ÓÏÂÀ´¾ÍÊǺ¯ÊýµÄÃû³Æº¯ÊýÃû³ÆµÄ¶¨Òå¿ÉÒԲο¼Java À൱Öз½·¨µÄÃüÃûÔ­Ôò£¬¶ÔÓÚÒ»¸öº¯Êý¿ÉÒÔÓÐÈô¸É¸öÊäÈë²ÎÊý£¬ËùÒÔº¯ÊýÃûºóÃæµÄÀ¨ºÅµ±ÖпÉÒÔ¶¨ÒåÈô¸É¸öÊäÈë²ÎÊý¡£

Drools ΪÎÒÃÇÌṩÁËÒ»¸öÌØÊâµÄimport Óï¾ä£ºimport function£¬Í¨¹ý¸ÃimportÓï¾ä£¬¿ÉÒÔʵÏÖ½«Ò»¸öJava ÀàÖо²Ì¬·½·¨ÒýÈëµ½Ò»¸ö¹æÔòÎļþµ±ÖУ¬Ê¹µÃ¸ÃÎļþµ±ÖеĹæÔò¿ÉÒÔÏñʹÓÃÆÕͨµÄDrools º¯ÊýÒ»ÑùÀ´Ê¹ÓÃJava ÀàÖÐij¸ö¾²Ì¬·½·¨¡£

import function test.RuleTools.printInfo;

ͨ¹ýʹÓÃimport function ¹Ø¼ü×Ö£¬½«test.RuleTools ÀàÖо²Ì¬·½·¨printInfo ÒýÈëµ½µ±Ç°¹æÔòÎļþÖС£

µ÷Ó÷½Ê½

RuleTools.printInfo£¨...£©

   
3118 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö