/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.benchmark.process;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
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.ResourceFactory;
//import org.drools.persistence.jpa.JPAKnowledgeService;
//import org.drools.runtime.Environment;
//import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
//import bitronix.tm.resource.jdbc.PoolingDataSource;
public class PerformanceTest {
public static void main(String[] args) throws Exception {
// Normal process execution
System.out.println("********************************");
System.out.println("*** Normal process execution ***");
System.out.println("********************************");
System.out.println();
System.out.println("Building knowledge base ... ");
KnowledgeBase kbase = readKnowledgeBase();
System.out.println("Initializing session ... ");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
// start a new process instance
for (int i = 0; i < 100; i++) {
ksession.startProcess("com.sample.empty", null);
}
System.out.println("Starting ... ");
Thread.sleep(1000);
long start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
ksession.startProcess("com.sample.empty", null);
}
long end = System.nanoTime() - start;
System.out.println("Total time = " + (end / 1000000) + "ms");
ksession.dispose();
}
// public static void main(String[] args) throws Exception {
// // Persistent process execution
// System.out.println("************************************");
// System.out.println("*** Persistent process execution ***");
// System.out.println("************************************");
// System.out.println();
// System.out.println("Initializing database");
// PoolingDataSource ds1 = new PoolingDataSource();
// ds1.setUniqueName("jdbc/testDS1");
// ds1.setClassName("org.h2.jdbcx.JdbcDataSource");
// ds1.setMaxPoolSize(3);
// ds1.setAllowLocalTransactions(true);
// ds1.getDriverProperties().put("user", "sa");
// ds1.getDriverProperties().put("password", "sasa");
// ds1.getDriverProperties().put("URL", "jdbc:h2:mem:mydb");
// ds1.init();
// EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
//
// System.out.println("Building knowledge base ... ");
// KnowledgeBase kbase = readKnowledgeBase();
// System.out.println("Initializing session ... ");
// Environment env = KnowledgeBaseFactory.newEnvironment();
// env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
// StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
// // start a new process instance
// for (int i = 0; i < 100; i++) {
// ksession.startProcess("com.sample.empty", null);
// }
// System.out.println("Starting ... ");
//
// Thread.sleep(1000);
// long start = System.nanoTime();
// for (int i = 0; i < 10000; i++) {
// ksession.startProcess("com.sample.empty", null);
// }
// long end = System.nanoTime() - start;
// System.out.println("Total time = " + (end / 1000000) + "ms");
// ksession.dispose();
// }
private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("empty.rf", PerformanceTest.class), ResourceType.DRF);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
}