use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.
the class LoadbalanceEndpointSerializer method serializeEndpoint.
protected OMElement serializeEndpoint(Endpoint endpoint) {
if (!(endpoint instanceof LoadbalanceEndpoint)) {
handleException("Invalid endpoint type.");
}
fac = OMAbstractFactory.getOMFactory();
OMElement endpointElement = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
LoadbalanceEndpoint loadbalanceEndpoint = (LoadbalanceEndpoint) endpoint;
serializeCommonAttributes(endpoint, endpointElement);
OMElement loadbalanceElement = fac.createOMElement("loadbalance", SynapseConstants.SYNAPSE_OMNAMESPACE);
endpointElement.addChild(loadbalanceElement);
loadbalanceElement.addAttribute(XMLConfigConstants.LOADBALANCE_ALGORITHM, loadbalanceEndpoint.getAlgorithm().getClass().getName(), null);
// set if failover is turned off in the endpoint
if (!loadbalanceEndpoint.isFailover()) {
loadbalanceElement.addAttribute("failover", "false", null);
}
if (loadbalanceEndpoint.isBuildMessageAtt()) {
loadbalanceElement.addAttribute(XMLConfigConstants.BUILD_MESSAGE, Boolean.toString(loadbalanceEndpoint.isBuildMessageAtt()), null);
}
// Serialize endpoint elements which are children of the loadbalance element
if (loadbalanceEndpoint.getChildren() != null) {
for (Endpoint childEndpoint : loadbalanceEndpoint.getChildren()) {
loadbalanceElement.addChild(EndpointSerializer.getElementFromEndpoint(childEndpoint));
}
} else {
for (Member member : loadbalanceEndpoint.getMembers()) {
OMElement memberEle = fac.createOMElement("member", SynapseConstants.SYNAPSE_OMNAMESPACE, loadbalanceElement);
memberEle.addAttribute(fac.createOMAttribute("hostName", null, member.getHostName()));
memberEle.addAttribute(fac.createOMAttribute("httpPort", null, String.valueOf(member.getHttpPort())));
memberEle.addAttribute(fac.createOMAttribute("httpsPort", null, String.valueOf(member.getHttpsPort())));
loadbalanceElement.addChild(memberEle);
}
}
// serialize the parameters
serializeProperties(loadbalanceEndpoint, endpointElement);
return endpointElement;
}
use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.
the class RecipientListEndpointFactory method getMembers.
@SuppressWarnings("rawtypes")
private List<Member> getMembers(OMElement loadbalanceElement) {
List<Member> members = new ArrayList<Member>();
for (Iterator memberIter = loadbalanceElement.getChildrenWithName(MEMBER); memberIter.hasNext(); ) {
if (log.isDebugEnabled()) {
log.debug("Getting Members..");
}
OMElement memberEle = (OMElement) memberIter.next();
Member member = new Member(memberEle.getAttributeValue(new QName("hostName")), -1);
String http = memberEle.getAttributeValue(new QName("httpPort"));
if (http != null) {
member.setHttpPort(Integer.parseInt(http));
}
String https = memberEle.getAttributeValue(new QName("httpsPort"));
if (https != null && https.trim().length() != 0) {
member.setHttpsPort(Integer.parseInt(https.trim()));
}
members.add(member);
}
return members;
}
use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.
the class ServiceLoadBalanceMembershipHandler method getNextApplicationMember.
public Member getNextApplicationMember(String host) {
DomainAlgorithmContext domainAlgorithmContext = getDomainAlgorithmContext(host);
String lbDomain = domainAlgorithmContext.getDomain();
LoadbalanceAlgorithm algorithm = domainAlgorithmContext.getAlgorithm();
GroupManagementAgent groupMgtAgent = clusteringAgent.getGroupManagementAgent(lbDomain);
if (groupMgtAgent == null) {
String msg = "A LoadBalanceEventHandler has not been specified in the axis2.xml " + "file for the domain " + lbDomain + " for host " + host;
log.error(msg);
throw new SynapseException(msg);
}
algorithm.setApplicationMembers(groupMgtAgent.getMembers());
AlgorithmContext context = domainAlgorithmContext.getAlgorithmContext();
return algorithm.getNextApplicationMember(context);
}
use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.
the class LoadbalanceEndpoint method sendToApplicationMember.
private void sendToApplicationMember(MessageContext synCtx, EndpointReference to, LoadbalanceFaultHandler faultHandler) {
org.apache.axis2.context.MessageContext axis2MsgCtx = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
String transport = axis2MsgCtx.getTransportIn().getName();
algorithm.setApplicationMembers(activeMembers);
Member currentMember = algorithm.getNextApplicationMember(algorithmContext);
faultHandler.setCurrentMember(currentMember);
if (currentMember != null) {
// URL rewrite
if (transport.equals("http") || transport.equals("https")) {
String address = to.getAddress();
if (address.indexOf(":") != -1) {
try {
address = new URL(address).getPath();
} catch (MalformedURLException e) {
String msg = "URL " + address + " is malformed";
log.error(msg, e);
throw new SynapseException(msg, e);
}
}
EndpointReference epr = new EndpointReference(transport + "://" + currentMember.getHostName() + ":" + ("http".equals(transport) ? currentMember.getHttpPort() : currentMember.getHttpsPort()) + address);
synCtx.setTo(epr);
if (failover) {
synCtx.getEnvelope().build();
}
AddressEndpoint endpoint = new AddressEndpoint();
EndpointDefinition definition = new EndpointDefinition();
endpoint.setDefinition(definition);
endpoint.init(synCtx.getEnvironment());
endpoint.send(synCtx);
} else {
log.error("Cannot load balance for non-HTTP/S transport " + transport);
}
} else {
// Remove the LoadbalanceFaultHandler
synCtx.getFaultStack().pop();
String msg = "No application members available";
log.error(msg);
throw new SynapseException(msg);
}
}
use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.
the class RecipientListEndpoint method sendToApplicationMembers.
/**
*<p>Iterates the <b>members</b> list, creates Address Endpoints
* from each member element and routes cloned copies of the message
* to each Address Endpoint.</p>
* @param synCtx - The Original Message received by Synapse
*/
private void sendToApplicationMembers(MessageContext synCtx) {
int i = 0;
boolean foundEndpoint = false;
for (Member member : members) {
org.apache.axis2.context.MessageContext axis2MsgCtx = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
String transport = axis2MsgCtx.getTransportIn().getName();
// If the transport is not HTTP nor HTTPS
if (!transport.equals("http") && !transport.equals("https")) {
// Skip member.
log.error("Cannot deliver for non-HTTP/S transport " + transport);
continue;
}
MessageContext newCtx = null;
try {
newCtx = MessageHelper.cloneMessageContext(synCtx);
} catch (AxisFault e) {
handleException("Error cloning the message context", e);
}
// Used when aggregating responses
newCtx.setProperty(EIPConstants.MESSAGE_SEQUENCE, String.valueOf(i++) + EIPConstants.MESSAGE_SEQUENCE_DELEMITER + members.size());
// evaluate the endpoint properties
evaluateProperties(newCtx);
// URL rewrite
String address = newCtx.getTo().getAddress();
if (address.indexOf(":") != -1) {
try {
address = new URL(address).getPath();
} catch (MalformedURLException e) {
String msg = "URL " + address + " is malformed";
log.error(msg, e);
throw new SynapseException(msg, e);
}
}
EndpointReference epr = new EndpointReference(transport + "://" + member.getHostName() + ":" + ("http".equals(transport) ? member.getHttpPort() : member.getHttpsPort()) + address);
newCtx.setTo(epr);
newCtx.pushFaultHandler(this);
AddressEndpoint endpoint = new AddressEndpoint();
EndpointDefinition definition = new EndpointDefinition();
endpoint.setDefinition(definition);
endpoint.init(newCtx.getEnvironment());
if (endpoint.readyToSend()) {
foundEndpoint = true;
endpoint.send(newCtx);
}
}
if (!foundEndpoint) {
String msg = "Recipient List endpoint : " + (getName() != null ? getName() : SynapseConstants.ANONYMOUS_ENDPOINT) + " - no ready child members";
log.warn(msg);
informFailure(synCtx, SynapseConstants.ENDPOINT_RL_NONE_READY, msg);
}
}
Aggregations