Package co.paralleluniverse.galaxy.jgroups

Source Code of co.paralleluniverse.galaxy.jgroups.JGroupsDistributedTreeTKB

/*
* Galaxy
* Copyright (C) 2012 Parallel Universe Software Co.
*
* This file is part of Galaxy.
*
* Galaxy is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* Galaxy is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Galaxy. If not, see <http://www.gnu.org/licenses/>.
*/
package co.paralleluniverse.galaxy.jgroups;

import co.paralleluniverse.galaxy.cluster.DistributedTreeTKB;
import com.google.common.base.Charsets;
import java.io.File;
import org.jgroups.Address;
import org.jgroups.Global;
import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;

/**
*
* @author pron
*/
public class JGroupsDistributedTreeTKB {
    public static void main(String[] args) throws Exception {
        java.util.logging.Logger.getLogger("").setLevel(java.util.logging.Level.FINER);
        System.setProperty(Global.CUSTOM_LOG_FACTORY, "mesi.jgroups.SLF4JLogFactory");


        final JChannel jchannel = new JChannel(new File("src/udp.xml"));
        jchannel.setReceiver(new ReceiverAdapter() {

            @Override
            public void receive(Message msg) {
                //System.err.println("XXXX " + msg);
            }
           
        });
        ControlChannel control = new ControlChannel(jchannel);

        ReplicatedTree.ConflictResolver conflictResolver = new ReplicatedTree.ConflictResolver() {
            @Override
            public byte[] resolve(String node, byte[] current, byte[] other, Address otherAddress) {
                final String currentString = current != null ? deserialize(current) : null;
                final String otherString = other != null ? deserialize(other) : null;
                System.out.println("CONFLICT IN " + node + ": " + currentString + " <-> " + otherString + " from: " + otherAddress);
                final boolean currentWins = jchannel.getAddress().compareTo(otherAddress) <= 0;
                System.out.println("CONFLICT RESOLVED: " + (currentWins ? "CURRENT " + jchannel.getAddress() + " " + currentString : "OTHER " + otherAddress + " " + otherString));
                return currentWins ? current : other;
            }
        };

        ReplicatedTree tree = new ReplicatedTree(control, conflictResolver, 5000);

        jchannel.connect("test_tree_cluster", null, 10000);
        final Address myAddress = jchannel.getAddress();


        DistributedTreeTKB tkb = new DistributedTreeTKB(new DistributedTreeAdapter(tree), myAddress.toString());
        tkb.run();
    }

    static byte[] serialize(String object) {
        return object.getBytes(Charsets.UTF_8);
    }

    static String deserialize(byte[] array) {
        return new String(array, Charsets.UTF_8);
    }
}
TOP

Related Classes of co.paralleluniverse.galaxy.jgroups.JGroupsDistributedTreeTKB

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.