public synchronized void reloadPackage(String packageName) throws RuleBaseException {
long start = System.currentTimeMillis();
packageStrings.clear();
StringBuffer packageString = initNewPackageString(packageName);
for (RuleBaseElementId id : manager.list(RuleBaseElementType.Function, packageName)) {
String code = manager.get(id);
packageString.append(code);
}
for (RuleBaseElementId id : manager.list(RuleBaseElementType.Rule, packageName)) {
String code = manager.get(id);
String formattedRule = String.format(RULE_TEMPLATE, id.getName(), code);
packageString.append(formattedRule);
}
Collection<String> flows = queryFlows(packageName);
Collection<KnowledgePackage> compiledPackage = compileDrlString(packageString.toString(), flows);
if (base.getKnowledgePackage(packageName) != null) {
base.removeKnowledgePackage(packageName);
}
base.addKnowledgePackages(compiledPackage);
LOGGER.info("Reloading only package {} took {}ms", packageName, System.currentTimeMillis() - start);
}