[jboss-jira] [JBoss JIRA] (DROOLS-1354) Drools PermGen OOM When create kiebulider several times

Shukang Guo (JIRA) issues at jboss.org
Fri Nov 4 05:35:01 EDT 2016


Shukang Guo created DROOLS-1354:
-----------------------------------

             Summary: Drools PermGen OOM When create kiebulider several times
                 Key: DROOLS-1354
                 URL: https://issues.jboss.org/browse/DROOLS-1354
             Project: Drools
          Issue Type: Bug
          Components: core engine
    Affects Versions: 6.4.0.Final
         Environment: Windows7 Tomcat7 JDK1.7 
            Reporter: Shukang Guo
            Assignee: Mario Fusco


When i need updating the rule , first i will delete it from kieFileSystem , then add it .Second i will create a new KieBuilder and buildAll().But after several time i have done , it would be gone by PermGen OOM.
{code:java}
	@Autowired
	private RuleService ruleService;

	private KieServices ks = KieServices.Factory.get();
	private KieFileSystem kFileSystem = ks.newKieFileSystem();

	private KieContainer kContainer;
	private KieBase kieBase;
	private KieBuilder kbuilder;
	private String defaultPath;

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.huawei.datalifecycle.rules.RunRuless#init(java.lang.String[])
	 */
	@Override
	@PostConstruct
	public void init() {
		List<Rule> rules = new ArrayList<>();
		rules.add(ruleService.selectById(15));
		// List<Rule> rules = ruleService.selectAll(0, 0);
		String[] paths = new String[rules.size()];
		for (int i = 0; i < paths.length; i++) {
			paths[i] = rules.get(i).getPath();
		}
		init(paths);

	}

	public void init(String[] paths) {
		boolean isSetDefaultPath = false;
		for (String path : paths) {
			if (isSetDefaultPath)
				kFileSystem
						.write(ks.getResources().newClassPathResource(path));
			else {
				Resource resource = ks.getResources().newClassPathResource(
						path);
				kFileSystem.write(resource);
				defaultPath = resource.getResourceType().getDefaultPath() + "/";
				isSetDefaultPath = true;
			}

		}
		kbuilder = ks.newKieBuilder(kFileSystem);
		kbuilder.buildAll();
		kContainer = ks.newKieContainer(ks.getRepository()
				.getDefaultReleaseId());
		kieBase = kContainer.getKieBase();

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.huawei.datalifecycle.rules.RunRuless#refresh(java.lang.String)
	 */
	public void refresh() {

		kbuilder = ks.newKieBuilder(kFileSystem);
		kbuilder.buildAll();
		kContainer.updateToVersion(ks.getRepository().getDefaultReleaseId());

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.huawei.datalifecycle.rules.RunRuless#getKieSession()
	 */
	@Override
	public KieSession getKieSession() {
		return kieBase.newKieSession();
	}

	@Override
	public void add(String path) {
		kFileSystem.write(ks.getResources().newClassPathResource(path));
		refresh();
	}

	@Override
	public void delete(String path) {
		kFileSystem.delete(defaultPath + path);
		refresh();
	}

	@Override
	public void update(String path) {
		kFileSystem.delete(defaultPath + path);
		kFileSystem.write(ks.getResources().newClassPathResource(path));
		refresh();
	}

{code}






--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the jboss-jira mailing list