DROOLS通过URL访问changset

package droolsRule;

import java.net.Authenticator;
import java.net.PasswordAuthentication;

import kafka.producer2.KafkaProducerTest;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentConfiguration;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.Resource;
import org.drools.io.ResourceChangeScannerConfiguration;
import org.drools.io.ResourceFactory;
import org.drools.io.impl.UrlResource;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

import bean.DroolsResult;
import bean.Reg;


public class RuleFilter {
	 public StatefulKnowledgeSession ksession = null;
	 public KnowledgeRuntimeLogger logger = null;
	 public KnowledgeAgent kagent = null;
	 public RuleFilter()
	 {
	 }
	 
	 public void getKsessionObj() throws Exception
	 {

	 }
	 
	 public void dispose()
	 {
		 	ksession.dispose();
	        logger.close();
	        ksession = null;
	        logger = null;
	 }
	
	 public  StatefulKnowledgeSession readKnowledgeBase(String path) throws Exception {
		 	if(kagent == null)
		 	{
		 		ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
		 		sconf.setProperty("drools.resource.scanner.interval", "10");
		 		ResourceFactory.getResourceChangeScannerService().configure(sconf);
		 		ResourceFactory.getResourceChangeScannerService().start();
		 		ResourceFactory.getResourceChangeNotifierService().start();
		 		
//		 		KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
//		 		aconf.setProperty("drools.agent.scanDirectories", "true");
//		 		aconf.setProperty("drools.agent.newInstance", "true");
		 		
	//	 		 UrlResource urlResource2 = (UrlResource)ResourceFactory.newUrlResource("http://localhost:8080/guvnor-5.6.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/heatbeat/LATEST/ChangeSet.xml");
//			     urlResource2.setBasicAuthentication("enabled");  
//			     urlResource2.setUsername("admin");  
//		         urlResource2.setPassword("admin");  
//		         urlResource2.setResourceType(ResourceType.PKG);
		 		
		 	}

		 	
		 
		 	//String path = "http://192.168.61.104:8080/guvnor-5.6.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/stormETL/LATEST";
	        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
	        UrlResource urlResource = ((UrlResource) ResourceFactory.newUrlResource(path));
	        urlResource.setBasicAuthentication("enabled");  
        	urlResource.setUsername("admin");  
        	urlResource.setPassword("admin");  
        	kbuilder.add(urlResource, ResourceType.PKG);  
	        KnowledgeBuilderErrors errors = kbuilder.getErrors();
	        if (errors.size() > 0) {
	            for (KnowledgeBuilderError error: errors) {
	                 System.err.println(error);
	            }
	            throw new IllegalArgumentException("Could not parse knowledge.");
	        }
	        
	        KnowledgeAgentConfiguration conf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();

	        Authenticator.setDefault(new Authenticator() {

	        // Check https://issues.jboss.org/browse/JBRULES-3465 for any future changes.

	        @Override

	        protected PasswordAuthentication getPasswordAuthentication() {

	        return new PasswordAuthentication(

	        "admin",

	        "admin".toCharArray());

	        }

	        });
	        
	        kagent = KnowledgeAgentFactory.newKnowledgeAgent("kagent2",conf);
	    	kagent.applyChangeSet(ResourceFactory.newUrlResource("http://localhost:8080/guvnor-5.6.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/heatbeat/LATEST/ChangeSet.xml"));
	 		kagent.addEventListener(new MYEventListener());
	       // KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
	        KnowledgeBase kbase = kagent.getKnowledgeBase();
	        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
	        ksession = kbase.newStatefulKnowledgeSession();
	        logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
	        return ksession;
	    }
	 public void runRroolsRule(KafkaProducerTest kafkaProducter,Object fact,String value,StatefulKnowledgeSession ksession) throws Exception
	 {
		   
	        long startTime = System.currentTimeMillis();
	   
	        DroolsResult dMessage = new DroolsResult();
	       // ksession.setGlobal("kafkaProducerObj", kafkaProducter);
	        ksession.setGlobal("dMessage", dMessage);
	 	    ksession.setGlobal("value", value);
	 	    ksession.insert(fact);
	 	    ksession.fireAllRules();
	 	    dMessage = (DroolsResult)ksession.getGlobal("dMessage");
	        System.out.print("~~~~~~~~" + dMessage.getFilterResult());
	        System.out.println("||||||||||||" + ksession.getFactCount());
	        dMessage = null;
	        if(ksession.getFactCount() > 10000)
	        {
	        	dispose();
	        	ksession = null;
	        	logger = null;
	        	//initDrools();
	        		
	        }
	        
	        long endTime = System.currentTimeMillis();
	        System.out.println("filter use time:" + (endTime - startTime));
	 }
	 //http://192.168.61.104:8080/guvnor-5.6.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/heatbeat/LATEST/SCENARIOS
	 public static void main(String[] args) throws Exception{
		 	KafkaProducerTest kafkaProducerObj = new KafkaProducerTest();
		    RuleFilter rf = new RuleFilter();
		    StatefulKnowledgeSession ksession =  rf.readKnowledgeBase("http://192.168.61.104:8080/guvnor-5.6.0.Final-tomcat-6.0/org.drools.guvnor.Guvnor/package/stormETL/LATEST");
			kafkaProducerObj.init();
		
			long startTime = System.currentTimeMillis(); 
		    for(int i = 0;i<10;i++)
	        {
			 	Reg reg = new Reg();
		     	String str = "123";
			    reg.setImei1("1111111111111111");
			    reg.setMeid("111");
			    //System.out.println(i);
			    rf.runRroolsRule(kafkaProducerObj, reg, str,ksession);
			   // reg = null;
			    System.out.println("!!!!!!!!!!!!!!!!!!" + i);
	        }
		    long endTime = System.currentTimeMillis(); 
		    System.out.println("all use time is:" + (endTime - startTime)); 
		
	    
	 }
}

  今天做DROOLS 通过网络访问changset(大多是通过文件方式访问,但是感觉既然用上了guvnor代码再做文件实在没意思)搞了几个小时,总算可以访问了。到此记录下

原文地址:https://www.cnblogs.com/yaohaitao/p/9290456.html