Search in sources :

Example 11 with Member

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;
}
Also used : LoadbalanceEndpoint(org.apache.synapse.endpoints.LoadbalanceEndpoint) Endpoint(org.apache.synapse.endpoints.Endpoint) LoadbalanceEndpoint(org.apache.synapse.endpoints.LoadbalanceEndpoint) OMElement(org.apache.axiom.om.OMElement) Member(org.apache.axis2.clustering.Member)

Example 12 with Member

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;
}
Also used : QName(javax.xml.namespace.QName) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator) OMElement(org.apache.axiom.om.OMElement) Member(org.apache.axis2.clustering.Member)

Example 13 with Member

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);
}
Also used : AlgorithmContext(org.apache.synapse.endpoints.algorithms.AlgorithmContext) SynapseException(org.apache.synapse.SynapseException) GroupManagementAgent(org.apache.axis2.clustering.management.GroupManagementAgent) LoadbalanceAlgorithm(org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm)

Example 14 with Member

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);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) SynapseException(org.apache.synapse.SynapseException) Member(org.apache.axis2.clustering.Member) URL(java.net.URL) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext) EndpointReference(org.apache.axis2.addressing.EndpointReference)

Example 15 with Member

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);
    }
}
Also used : AxisFault(org.apache.axis2.AxisFault) MalformedURLException(java.net.MalformedURLException) SynapseException(org.apache.synapse.SynapseException) URL(java.net.URL) EndpointReference(org.apache.axis2.addressing.EndpointReference) MessageContext(org.apache.synapse.MessageContext) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext) Member(org.apache.axis2.clustering.Member) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext)

Aggregations

Member (org.apache.axis2.clustering.Member)13 SynapseException (org.apache.synapse.SynapseException)7 EndpointReference (org.apache.axis2.addressing.EndpointReference)5 Axis2MessageContext (org.apache.synapse.core.axis2.Axis2MessageContext)5 Endpoint (org.apache.synapse.endpoints.Endpoint)5 MalformedURLException (java.net.MalformedURLException)4 OMElement (org.apache.axiom.om.OMElement)4 URL (java.net.URL)3 ArrayList (java.util.ArrayList)3 AxisFault (org.apache.axis2.AxisFault)3 ConfigurationContext (org.apache.axis2.context.ConfigurationContext)3 Iterator (java.util.Iterator)2 QName (javax.xml.namespace.QName)2 MessageContext (org.apache.synapse.MessageContext)2 Axis2SynapseEnvironment (org.apache.synapse.core.axis2.Axis2SynapseEnvironment)2 DynamicLoadbalanceEndpoint (org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint)2 IndirectEndpoint (org.apache.synapse.endpoints.IndirectEndpoint)2 SALoadbalanceEndpoint (org.apache.synapse.endpoints.SALoadbalanceEndpoint)2 AlgorithmContext (org.apache.synapse.endpoints.algorithms.AlgorithmContext)2 SessionInformation (org.apache.synapse.endpoints.dispatch.SessionInformation)2