/*
* 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;
import java.util.ArrayList;
/**
* A channel exception is thrown when an internal error happens
* somewhere in the channel .
* < p >
* When a global error happens , the cause can be retrieved using < code > getCause ( ) < / code > < br > < br >
* If an application is sending a message and some of the recipients fail to receive it ,
* the application can retrieve what recipients failed by using the < code > getFaultyMembers ( ) < / code >
* method . This way , an application will always know if a message was delivered successfully or not .
*/
public class ChannelException extends Exception {
private static final long serialVersionUID = 1 L;
/**
* Empty list to avoid reinstantiating lists
*/
protected static final FaultyMember[] EMPTY_LIST = new FaultyMember[0 ];
/**
* Holds a list of faulty members
*/
private ArrayList<FaultyMember> faultyMembers=null ;
/**
* Constructor , creates a ChannelException
* @ see java . lang . Exception # Exception ( )
*/
public ChannelException() {
super ();
}
/**
* Constructor , creates a ChannelException with an error message
* @ param message The error message
* @ see java . lang . Exception # Exception ( String )
*/
public ChannelException(String message) {
super (message);
}
/**
* Constructor , creates a ChannelException with an error message and a cause
* @ param message The error message
* @ param cause Throwable
* @ see java . lang . Exception # Exception ( String , Throwable )
*/
public ChannelException(String message, Throwable cause) {
super (message, cause);
}
/**
* Constructor , creates a ChannelException with a cause
* @ param cause Throwable
* @ see java . lang . Exception # Exception ( Throwable )
*/
public ChannelException(Throwable cause) {
super (cause);
}
/**
* Returns the message for this exception
* @ return the error message
* @ see java . lang . Exception # getMessage ( )
*/
@Override
public String getMessage() {
StringBuilder buf = new StringBuilder(super .getMessage());
if (faultyMembers==null || faultyMembers.size() == 0 ) {
buf.append("; No faulty members identified." );
} else {
buf.append("; Faulty members:" );
for (FaultyMember mbr : faultyMembers) {
buf.append(mbr.getMember().getName());
buf.append("; " );
}
}
return buf.toString();
}
/**
* Adds a faulty member , and the reason the member failed .
* @ param mbr Member
* @ param x Exception
* @ return < code > true < / code > if the member was added
*/
public boolean addFaultyMember(Member mbr, Exception x ) {
return addFaultyMember(new FaultyMember(mbr,x));
}
/**
* Adds a list of faulty members
* @ param mbrs FaultyMember [ ]
* @ return the number of members added
*/
public int addFaultyMember(FaultyMember[] mbrs) {
int result = 0 ;
for (int i=0 ; mbrs!=null && i<mbrs.length; i++ ) {
if ( addFaultyMember(mbrs[i]) ) {
result++;
}
}
return result;
}
/**
* Adds a faulty member
* @ param mbr FaultyMember
* @ return < code > true < / code > if the member was added
*/
public boolean addFaultyMember(FaultyMember mbr) {
if ( this .faultyMembers==null ) {
this .faultyMembers = new ArrayList<>();
}
if ( !faultyMembers.contains(mbr) ) {
return faultyMembers.add(mbr);
} else {
return false ;
}
}
/**
* Returns an array of members that failed and the reason they failed .
* @ return FaultyMember [ ]
*/
public FaultyMember[] getFaultyMembers() {
if ( this .faultyMembers==null ) {
return EMPTY_LIST;
}
return faultyMembers.toArray(new FaultyMember[0 ]);
}
/**
* Represent a failure to a specific member when a message was sent to more
* than one member
*/
public static class FaultyMember {
protected final Exception cause;
protected final Member member;
public FaultyMember(Member mbr, Exception x) {
this .member = mbr;
this .cause = x;
}
public Member getMember() {
return member;
}
public Exception getCause() {
return cause;
}
@Override
public String toString() {
return "FaultyMember:" +member.toString();
}
@Override
public int hashCode() {
return (member!=null )?member.hashCode():0 ;
}
@Override
public boolean equals(Object o) {
if (member==null || (!(o instanceof FaultyMember)) || (((FaultyMember)o).member==null )) {
return false ;
}
return member.equals(((FaultyMember)o).member);
}
}
}
Messung V0.5 in Prozent C=93 H=96 G=94
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-03)
¤
*© Formatika GbR, Deutschland