[rules-users] refreshing rules in 4.0.7, Janino

Mike Merrill michael.merrill at vonage.com
Thu Apr 30 11:22:33 EDT 2009


Hi all,
I'm seeing consistency issues when trying to refresh rules manually.  I am 
seeing issues with sessions getting different results while I call this 
function in a loop.  Is there a more proper way of migrating the sessions over 
to a rules base that has updated rules?


    /**
     * Function to compile the drools rules.  It reads the rules from the data 
access object
     * @throws APIException
     */
    public static void refreshRules() throws APIException {
    	if(null == DAO) return;
    	try {
    		DAO.getSqlMapClient().flushDataCache();
    		RULES_BASE.lock();
	    	Package[] packages = RULES_BASE.getPackages();
	    	for(int i = 0; i < packages.length; ++i) {
	    		RULES_BASE.removePackage(packages[i].getName());
	    	}
	    	
	    	Properties properties = new Properties();
	    	properties.setProperty( "drools.dialect.java.compiler",
	    	                        "JANINO" );
	    	PackageBuilderConfiguration cfg = new 
PackageBuilderConfiguration( properties );

	    	
	    	PackageBuilder builder = new PackageBuilder(cfg);
	        Collection<DroolsVO> rulesCollection = DAO.getRules();
	        for(DroolsVO rule : rulesCollection) {
	        	Reader source = new StringReader(rule.getRules());
	        	builder.addPackageFromDrl(source);
	        }
        	Package pkg = builder.getPackage();
        	if(null != pkg) {
        		RULES_BASE.addPackage(pkg);
        	}
    	} catch(... e) {
    		throw APIExceptionFactory.generateException(e);
    	} finally {
        	RULES_BASE.unlock();
        }
    }





More information about the rules-users mailing list