/* * Copyright 2010 salaboy. * * 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. * under the License. */ package org.drools.grid; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import junit.framework.Assert; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.KnowledgeBaseFactoryService; import org.drools.base.MapGlobalResolver; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactoryService; import org.drools.builder.ResourceType; import org.drools.grid.local.LocalDirectoryConnector; import org.drools.grid.local.LocalNodeConnector; import org.drools.grid.strategies.ReturnAlwaysTheFirstSelectionStrategy; import org.drools.io.ResourceFactory; import org.drools.persistence.jpa.impl.KnowledgeStoreServiceImpl; import org.drools.runtime.Environment; import org.drools.runtime.EnvironmentName; import org.drools.runtime.StatefulKnowledgeSession; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import bitronix.tm.TransactionManagerServices; import bitronix.tm.resource.jdbc.PoolingDataSource; /** * * @author salaboy */ public class LocalExecutionNodeTest extends ExecutionNodeBase { private static EntityManagerFactory entityManagerFactory; private static PoolingDataSource dataSource; private GenericConnection connection; public LocalExecutionNodeTest() { } @BeforeClass public static void initializeEntityManager() { System.out.println( "Initializing Entity Manager" ); entityManagerFactory = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" ); } @BeforeClass public static void initializeDataSource() { System.out.println( "Initializing Datasource" ); dataSource = new PoolingDataSource(); dataSource.setUniqueName( "jdbc/testDS1" ); dataSource.setClassName( "org.h2.jdbcx.JdbcDataSource" ); dataSource.setMaxPoolSize( 3 ); dataSource.setAllowLocalTransactions( true ); dataSource.getDriverProperties().put( "user", "sa" ); dataSource.getDriverProperties().put( "password", "sasa" ); dataSource.getDriverProperties().put( "URL", "jdbc:h2:mem:mydb" ); dataSource.init(); } @Before public void configureNode() throws ConnectorException { this.connection = new GridConnection(); this.connection.addExecutionNode( new LocalNodeConnector() ); this.connection.addDirectoryNode( new LocalDirectoryConnector() ); this.node = this.connection.getExecutionNode( new ReturnAlwaysTheFirstSelectionStrategy() ); this.node.set( KnowledgeStoreServiceImpl.class, new KnowledgeStoreServiceImpl() ); } private Environment newEnvironment() { Environment environment = KnowledgeBaseFactory.newEnvironment(); environment.set( EnvironmentName.ENTITY_MANAGER_FACTORY, entityManagerFactory ); environment.set( EnvironmentName.GLOBALS, new MapGlobalResolver() ); environment.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager() ); return environment; } @Test public void persistenceTest() { Environment env = newEnvironment(); String str = ""; str += "package org.drools \n"; str += "global java.util.List list \n"; str += "rule rule1 \n"; str += " dialect \"java\" \n"; str += "when \n"; str += "then \n"; str += " System.out.println( \"hello1!!!\" ); \n"; str += "end \n"; str += "rule rule2 \n"; str += " dialect \"java\" \n"; str += "when \n"; str += "then \n"; str += " System.out.println( \"hello2!!!\" ); \n"; str += "end \n"; KnowledgeBuilder kbuilder = this.node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); if ( kbuilder.hasErrors() ) { System.out.println( "Errors: " + kbuilder.getErrors() ); } KnowledgeBase kbase = this.node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase(); Assert.assertNotNull( kbase ); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = this.node .get( KnowledgeStoreServiceImpl.class ) .newStatefulKnowledgeSession( kbase, null, env ); Assert.assertNotNull( ksession ); } }