Package org.drools.grid

Source Code of org.drools.grid.NodeTests$MyObject

/*
* 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 java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactoryService;
import org.drools.SystemEventListenerFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactoryService;
import org.drools.builder.ResourceType;
import org.drools.grid.conf.GridPeerServiceConfiguration;
import org.drools.grid.conf.impl.GridPeerConfiguration;
import org.drools.grid.impl.GridImpl;
import org.drools.grid.impl.MultiplexSocketServerImpl;
import org.drools.grid.io.impl.MultiplexSocketServiceConfiguration;
import org.drools.grid.remote.mina.MinaAcceptorFactoryService;
import org.drools.grid.service.directory.WhitePages;
import org.drools.grid.service.directory.impl.CoreServicesLookupConfiguration;
import org.drools.grid.service.directory.impl.WhitePagesImpl;
import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
import org.drools.grid.timer.impl.CoreServicesSchedulerConfiguration;
import org.drools.io.impl.ByteArrayResource;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import static org.junit.Assert.*;

public class NodeTests {

    private Map<String, GridServiceDescription> coreServicesMap;

    public NodeTests() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
        this.coreServicesMap = new HashMap();
    }

    @After
    public void tearDown() {
    }

    @Test
    public void localNodeTest() {
        Grid grid = new GridImpl( new HashMap<String, Object>() );
        GridPeerConfiguration conf = new GridPeerConfiguration();

        GridPeerServiceConfiguration wpconf = new WhitePagesLocalConfiguration();
        conf.addConfiguration( wpconf );

        conf.configure( grid );

        GridNode gnode = grid.createGridNode( "n1" );

        KnowledgeBuilder kbuilder = gnode.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
        assertNotNull( kbuilder );

        KnowledgeBase kbase = gnode.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
        assertNotNull( kbase );

        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
        assertNotNull( session );

        WhitePages wp = grid.get( WhitePages.class );
        GridServiceDescription gsd = wp.lookup( "n1" );
        assertNotNull(gsd);
        assertEquals( 0, gsd.getAddresses().size() );

        GridNode gnode1 = grid.getGridNode( gsd.getId() );
        assertNotNull( gnode1 );

        grid.removeGridNode( gsd.getId() );
        assertNull( wp.lookup( "n1" ) );
        assertNull( grid.getGridNode( gsd.getId() ) );

        grid.dispose();
        // node has been removed, so disposal should not affect it
        assertFalse( gnode.isDisposed() );

        gnode.dispose();
        assertTrue( gnode.isDisposed() );

    }


    @Test
    public void remoteNodeTest() {
        WhitePages wp = new WhitePagesImpl();
        Grid grid1 = new GridImpl( new HashMap<String, Object>() );
        configureGrid1( grid1,
                8000,
                wp );

        Grid grid2 = new GridImpl( new HashMap<String, Object>() );
        configureGrid1( grid2,
                -1,
                wp );

        GridNode n1 = grid1.createGridNode( "n1" );
        grid1.get( SocketService.class ).addService( "n1", 8000, n1 );

        GridServiceDescription<GridNode> n1Gsd = grid2.get( WhitePages.class ).lookup( "n1" );
        GridConnection<GridNode> conn = grid2.get( ConnectionFactoryService.class ).createConnection( n1Gsd );
        GridNode remoteN1 = conn.connect();

        KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();

        Assert.assertNotNull( kbuilder );

        String rule = "package test\n"
                + "global org.drools.grid.Grid grid; \n" +
                "" +
                "rule \"test\""
                + "  when"
                + "  then"
                + "      System.out.println(\"Rule Fired!\");"
                + " end";

        kbuilder.add( new ByteArrayResource( rule.getBytes() ),
                ResourceType.DRL );

        KnowledgeBuilderErrors errors = kbuilder.getErrors();
        if ( errors != null && errors.size() > 0 ) {
            for ( KnowledgeBuilderError error : errors ) {
                System.out.println( "Error: " + error.getMessage() );

            }
            fail("KnowledgeBase did not build");
        }

        KnowledgeBaseFactoryService kbfs = remoteN1.get( KnowledgeBaseFactoryService.class );
        KnowledgeBase kbase = kbfs.newKnowledgeBase( kbfs.newKnowledgeBaseConfiguration() );

        Assert.assertNotNull( kbase );

        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();

        Assert.assertNotNull( session );

        FactHandle handle = session.insert( new MyObject("myObj1") );
        Assert.assertNotNull( handle );

        int i = session.fireAllRules();
        Assert.assertEquals( 1,
                i );

        grid1.dispose();
        grid2.dispose();

        assertTrue( n1.isDisposed() );
        assertTrue( remoteN1.isDisposed() );

    }

    @Test
    public void remoteNodeRetractUpdateGlobalsTest() {
        WhitePages wp = new WhitePagesImpl();
        Grid grid1 = new GridImpl( new HashMap<String, Object>() );
        configureGrid1( grid1,
                8000,
                wp );

        Grid grid2 = new GridImpl( new HashMap<String, Object>() );
        configureGrid1( grid2,
                -1,
                wp );

        GridNode n1 = grid1.createGridNode( "n1" );
        grid1.get( SocketService.class ).addService( "n1", 8000, n1 );

        GridServiceDescription<GridNode> n1Gsd = grid2.get( WhitePages.class ).lookup( "n1" );
        GridConnection<GridNode> conn = grid2.get( ConnectionFactoryService.class ).createConnection( n1Gsd );
        GridNode remoteN1 = conn.connect();

        KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();

        Assert.assertNotNull( kbuilder );

        String rule = "package test\n"
                + "import org.drools.grid.NodeTests.MyObject;\n"
                + "global MyObject myGlobalObj;\n"
                + "global org.drools.grid.Grid grid; \n"
                + "rule \"test\""
                + "  when"
                + "       $o: MyObject()"
                + "  then"
                + "      System.out.println(\"My Global Object -> \"+myGlobalObj.getName());"
                + "      System.out.println(\"Rule Fired! ->\"+$o.getName());"
                + " end";

        kbuilder.add( new ByteArrayResource( rule.getBytes() ),
                ResourceType.DRL );

        KnowledgeBuilderErrors errors = kbuilder.getErrors();
        if ( errors != null && errors.size() > 0 ) {
            for ( KnowledgeBuilderError error : errors ) {
                System.out.println( "Error: " + error.getMessage() );

            }
            fail("KnowledgeBase did not build");
        }

        KnowledgeBase kbase = remoteN1.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();

        Assert.assertNotNull( kbase );

        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();

        Assert.assertNotNull( session );
        session.setGlobal("myGlobalObj", new MyObject("myGlobalObj"));

        FactHandle handle = session.insert( new MyObject("myObj1") );
        Assert.assertNotNull( handle );

        int fired = session.fireAllRules();
        Assert.assertEquals( 1,
                fired );

        session.retract(handle);


        handle = session.insert(new MyObject("myObj2"));

        session.update(handle, new MyObject("myObj3"));

        fired = session.fireAllRules();

        grid1.dispose();
        grid2.dispose();
        assertTrue( remoteN1.isDisposed() );
        assertTrue( n1.isDisposed() );

    }

    private void configureGrid1(Grid grid,
                                int port,
                                WhitePages wp) {

        //Local Grid Configuration, for our client
        GridPeerConfiguration conf = new GridPeerConfiguration();

        //Configuring the Core Services White Pages
        GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesLookupConfiguration( coreServicesMap );
        conf.addConfiguration( coreSeviceWPConf );

        //Configuring the Core Services Scheduler
        GridPeerServiceConfiguration coreSeviceSchedulerConf = new CoreServicesSchedulerConfiguration();
        conf.addConfiguration( coreSeviceSchedulerConf );

        //Configuring the WhitePages
        WhitePagesLocalConfiguration wplConf = null;
        if ( wp != null ) {
            wplConf = new WhitePagesLocalConfiguration();
            wplConf.setWhitePages( wp );
            conf.addConfiguration( wplConf );
        }

//        //Create a Local Scheduler
//        SchedulerLocalConfiguration schlConf = new SchedulerLocalConfiguration( "myLocalSched" );
//        conf.addConfiguration( schlConf );

        if ( port >= 0 ) {
            //Configuring the SocketService
            MultiplexSocketServiceConfiguration socketConf = new MultiplexSocketServiceConfiguration( new MultiplexSocketServerImpl( "127.0.0.1",
                    new MinaAcceptorFactoryService(),
                    SystemEventListenerFactory.getSystemEventListener(),
                    grid) );
            socketConf.addService( WhitePages.class.getName(), wplConf.getWhitePages(), port );
//            socketConf.addService( SchedulerService.class.getName(), schlConf.getSchedulerService(), port );

            conf.addConfiguration( socketConf );
        }
        conf.configure( grid );

    }

    public static class MyObject
            implements
            Serializable {
        private String name;
        public MyObject(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final MyObject other = (MyObject) obj;
            if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
                return false;
            }
            return true;
        }

        @Override
        public int hashCode() {
            int hash = 3;
            hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
            return hash;
        }

        @Override
        public String toString() {
            return "MyObject{" + "name=" + name + '}';
        }





    }
}
TOP

Related Classes of org.drools.grid.NodeTests$MyObject

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.