init
This commit is contained in:
123
test/org/apache/catalina/tribes/demos/MembersWithProperties.java
Normal file
123
test/org/apache/catalina/tribes/demos/MembersWithProperties.java
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user