1 /* 2 * Copyright (c) 1998-2002 The Jgroup Team. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU Lesser General Public License for more details. 12 * 13 * You should have received a copy of the GNU Lesser General Public License 14 * along with this program; if not, write to the Free Software 15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 16 * 17 */ 18 19 package jgroup.core; 20 21 import jgroup.core.Layer.FinalizeLayer; 22 23 /** 24 * The facilities provided by the group membership service included in 25 * Jgroup may be accessed using the <code>MembershipService</code> 26 * interface. Methods in this interfaces enable objects to become 27 * members of a group and subsequentially leave it. <p> 28 * 29 * Instances of <code>MembershipService</code> may be obtained through 30 * the <code>GroupManager</code> class. 31 * 32 * @author Alberto Montresor 33 * @author Hein Meling 34 * @since Jgroup 0.1 (Revised Jgroup 2.2) 35 * @see jgroup.core.GroupManager 36 */ 37 public interface MembershipService 38 extends Layer, FinalizeLayer 39 { 40 41 /** 42 * Requests to join a group identified by <code>groupId</code>. <p> 43 * 44 * @param groupId 45 * Non-negative integer identifying the group. 46 * @exception IllegalArgumentException 47 * Raised if <code>groupId</code> is negative. 48 * @exception JgroupException 49 * Raised if the membership service receives a request to join a 50 * group to which it is already a member. 51 */ 52 public void join(int groupId) 53 throws JgroupException; 54 55 56 /** 57 * Requests to join the default group associated with the Jgroup daemon. <p> 58 * 59 * Each Jgroup daemon has a default group. If a Jgroup daemon does not need 60 * to be shared by multiple groups, the application servers may simply join 61 * the default group without having to specify group identifiers. 62 * 63 * @exception JgroupException 64 * Raised if the membership service receives a request to join a 65 * group to which it is already a member. 66 */ 67 public void join() 68 throws JgroupException; 69 70 71 /** 72 * Request to leave a group. Note that an object member may receive 73 * event notifications such as view installations for a group even 74 * after having requested to leave the group itself. However, the 75 * member will eventually leave the group. When this happens, its 76 * <code>hasLeft</code> method is invoked. After this invocation, 77 * the member will not receive any further event notification related 78 * to the group. 79 * 80 * @exception JgroupException 81 * Rasied if the server is not member of any group, or is already 82 * leaving its current group. 83 */ 84 public void leave() 85 throws JgroupException; 86 87 88 /** 89 * Returns true if the <code>GroupManager</code> is member of some 90 * group. Otherwise, false is returned. 91 */ 92 public boolean isMember(); 93 94 95 /** 96 * Returns true if the <code>GroupManager</code> is in the process of 97 * joining some group. Otherwise, false is returned. 98 */ 99 public boolean isJoining(); 100 101 102 /** 103 * Returns true if the <code>GroupManager</code> is member of some group 104 * or is in the process of joining some group. Otherwise, false is returned. 105 */ 106 public boolean isMemberOrJoining(); 107 108 109 /** 110 * Returns true if the local member is the group leader. 111 */ 112 public boolean isLeader(); 113 114 115 /** 116 * Returns the member identifier of the local member. 117 */ 118 public MemberId getMyIdentifier(); 119 120 121 /** 122 * Returns the group identifier. 123 */ 124 public int getGid(); 125 126 127 /** 128 * Returns a <code>MemberTable</code> helper object that will be 129 * notified of changes in the membership. This is used to provide 130 * application developers with additional information about members 131 * of their current view. 132 */ 133 public MemberTable getMemberTable(); 134 135 136 /** 137 * Return the number of members of this group. 138 */ 139 public int members(); 140 141 142 /** 143 * Position index of this member in the array containing 144 * the members of the current view. 145 */ 146 public int getViewIndex(); 147 148 149 /** 150 * Position index of this member in the array containing 151 * the local members of the current view. 152 */ 153 public int getMemberIndex(); 154 155 } // END MembershipService