Package org.apache.catalina.tribes.demos

Source Code of org.apache.catalina.tribes.demos.MembersWithProperties$Shutdown

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.catalina.tribes.demos;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;

import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.ManagedChannel;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.MembershipListener;
import org.apache.catalina.tribes.util.Arrays;
import org.apache.catalina.tribes.util.UUIDGenerator;

public class MembersWithProperties implements MembershipListener{
    static Thread main;

    public MembersWithProperties(Channel channel, Properties props) throws IOException {
        channel.addMembershipListener(this);
        ManagedChannel mchannel = (ManagedChannel)channel;
        mchannel.getMembershipService().setPayload(getPayload(props));
    }
   
    byte[] getPayload(Properties props) throws IOException {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        props.store(bout,"");
        return bout.toByteArray();
    }
   
    Properties getProperties(byte[] payload) throws IOException {
        ByteArrayInputStream bin = new ByteArrayInputStream(payload);
        Properties props = new Properties();
        props.load(bin);
        return props;
    }

    @Override
    public void memberAdded(Member member) {
        try {
            System.out.println("Received member added:"+member);
            System.out.println("Payload["+member+"] :");
            getProperties(member.getPayload()).store(System.out,"");
        }catch ( Exception x ) {
            x.printStackTrace();
        }
    }
 
    @Override
    public void memberDisappeared(Member member) {
        try {
            System.out.println("Received member disappeared:"+member);
            System.out.println("Payload["+member+"] :");
            getProperties(member.getPayload()).store(System.out,"");
        }catch ( Exception x ) {
            x.printStackTrace();
        }
    }

    public static void usage() {
        System.out.println("Tribes Member Properties demo.");
        System.out.println("Usage:\n\t" +
                           "java MemberWithProperties \n\t" +
                           "Channel options:" +
                           ChannelCreator.usage() + "\n\n" +
                           "Example:\n\t" +
                           "java MembersWithProperties -port 4004\n\t" +
                           "java MembersWithProperties -bind 192.168.0.45 -port 4005\n\t" +
                           "java MembersWithProperties -bind 192.168.0.45 -port 4005 -mbind 192.168.0.45 -count 100 -stats 10\n");
    }

    @SuppressWarnings("unused")
    public static void main(String[] args) throws Exception {
        if (args.length==0) usage();
        main = Thread.currentThread();
        ManagedChannel channel = (ManagedChannel) ChannelCreator.createChannel(args);
        Properties props = new Properties();
        props.setProperty("mydomainkey","mydomainvalue");
        props.setProperty("someotherkey", Arrays.toString(UUIDGenerator.randomUUID(true)));
        new MembersWithProperties(channel, props);
        channel.start(Channel.DEFAULT);
        Runtime.getRuntime().addShutdownHook(new Shutdown(channel));
        try {
            Thread.sleep(Long.MAX_VALUE);
        }catch(InterruptedException ix) {
            Thread.sleep(5000);//allow everything to shutdown
        }
    }

    public static class Shutdown extends Thread {
        ManagedChannel channel = null;
        public Shutdown(ManagedChannel channel) {
            this.channel = channel;
        }

        @Override
        public void run() {
            System.out.println("Shutting down...");
            try {
                channel.stop(Channel.DEFAULT);
            } catch (Exception x) {
                x.printStackTrace();
            }
            System.out.println("Channel stopped.");
            main.interrupt();
        }
    }
}
TOP

Related Classes of org.apache.catalina.tribes.demos.MembersWithProperties$Shutdown

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.