zoukankan      html  css  js  c++  java
  • 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代码再做文件实在没意思)搞了几个小时,总算可以访问了。到此记录下

  • 相关阅读:
    spring4之依赖注入的三种方式
    Hibernate之总结
    Hibernate之dynamic-update
    ThinkPhp调用webservice
    Robot Framework:Web自动化之-元素处理
    Robot Framework:Web自动化之-元素定位
    RobotFramework:python+robotframework+selenium2library测试环境部署说明文档
    Robot Framework:Httplibrary库
    URL备忘
    Windows:CMD命令备忘
  • 原文地址:https://www.cnblogs.com/yaohaitao/p/9290456.html
Copyright © 2011-2022 走看看