Search in sources :

Example 1 with LoadBalanceMembershipHandler

use of org.apache.synapse.core.LoadBalanceMembershipHandler in project wso2-synapse by wso2.

the class DynamicLoadBalanceEndpointTest method testSend.

/**
 * Test sending a message to a load balance EP
 *
 * @throws AxisFault on an issue sending message to DynamicLoadBalanceEndpoint
 */
@Test
public void testSend() throws AxisFault {
    DynamicLoadbalanceEndpoint dynamicLoadbalanceEndpoint = new DynamicLoadbalanceEndpoint();
    SynapseEnvironment synapseEnvironment = getMockedSynapseEnvironment();
    dynamicLoadbalanceEndpoint.init(synapseEnvironment);
    MessageContext messageContext = createMessageContext();
    // Mock a LoadBalanceMembershipHandler and set
    LoadBalanceMembershipHandler loadBalanceMembershipHandler = PowerMockito.mock(LoadBalanceMembershipHandler.class);
    Member member1 = new Member("localhost", 9000);
    Mockito.when(loadBalanceMembershipHandler.getNextApplicationMember(any(AlgorithmContext.class))).thenReturn(member1);
    dynamicLoadbalanceEndpoint.setLoadBalanceMembershipHandler(loadBalanceMembershipHandler);
    // set mocked SynapseEnvironment to message context
    ((Axis2MessageContext) messageContext).getAxis2MessageContext().getConfigurationContext().getAxisConfiguration().addParameter(SynapseConstants.SYNAPSE_ENV, synapseEnvironment);
    messageContext.setEnvironment(synapseEnvironment);
    // send message
    dynamicLoadbalanceEndpoint.send(messageContext);
    Assert.assertNotNull("SynapseConstants.LAST_ENDPOINT should return a not null value", messageContext.getProperty(SynapseConstants.LAST_ENDPOINT));
}
Also used : AlgorithmContext(org.apache.synapse.endpoints.algorithms.AlgorithmContext) Axis2SynapseEnvironment(org.apache.synapse.core.axis2.Axis2SynapseEnvironment) SynapseEnvironment(org.apache.synapse.core.SynapseEnvironment) LoadBalanceMembershipHandler(org.apache.synapse.core.LoadBalanceMembershipHandler) MessageContext(org.apache.synapse.MessageContext) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext) Member(org.apache.axis2.clustering.Member) Test(org.junit.Test)

Example 2 with LoadBalanceMembershipHandler

use of org.apache.synapse.core.LoadBalanceMembershipHandler in project wso2-synapse by wso2.

the class DynamicLoadbalanceEndpointFactory method createEndpoint.

protected Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint, Properties properties) {
    OMElement loadbalanceElement = epConfig.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "dynamicLoadbalance"));
    if (loadbalanceElement != null) {
        DynamicLoadbalanceEndpoint loadbalanceEndpoint = new DynamicLoadbalanceEndpoint();
        // set endpoint name
        OMAttribute name = epConfig.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
        if (name != null) {
            loadbalanceEndpoint.setName(name.getAttributeValue());
        }
        // get the session for this endpoint
        OMElement sessionElement = epConfig.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "session"));
        if (sessionElement != null) {
            OMElement sessionTimeout = sessionElement.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "sessionTimeout"));
            if (sessionTimeout != null) {
                try {
                    loadbalanceEndpoint.setSessionTimeout(Long.parseLong(sessionTimeout.getText().trim()));
                } catch (NumberFormatException nfe) {
                    handleException("Invalid session timeout value : " + sessionTimeout.getText());
                }
            }
            String type = sessionElement.getAttributeValue(new QName("type"));
            if (type.equalsIgnoreCase("soap")) {
                Dispatcher soapDispatcher = new SoapSessionDispatcher();
                loadbalanceEndpoint.setDispatcher(soapDispatcher);
            } else if (type.equalsIgnoreCase("http")) {
                Dispatcher httpDispatcher = new HttpSessionDispatcher();
                loadbalanceEndpoint.setDispatcher(httpDispatcher);
            }
            loadbalanceEndpoint.setSessionAffinity(true);
        }
        // set if failover is turned off
        String failover = loadbalanceElement.getAttributeValue(new QName("failover"));
        if (failover != null && failover.equalsIgnoreCase("false")) {
            loadbalanceEndpoint.setFailover(false);
        } else {
            loadbalanceEndpoint.setFailover(true);
        }
        OMElement eventHandler = loadbalanceElement.getFirstChildWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "membershipHandler"));
        if (eventHandler != null) {
            String clazz = eventHandler.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "class")).trim();
            try {
                LoadBalanceMembershipHandler lbMembershipHandler = (LoadBalanceMembershipHandler) Class.forName(clazz).newInstance();
                Properties lbProperties = new Properties();
                for (Iterator props = eventHandler.getChildrenWithName(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "property")); props.hasNext(); ) {
                    OMElement prop = (OMElement) props.next();
                    String propName = prop.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "name")).trim();
                    String propValue = prop.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "value")).trim();
                    lbProperties.put(propName, propValue);
                }
                // Set load balance algorithm
                LoadbalanceAlgorithm algorithm = LoadbalanceAlgorithmFactory.createLoadbalanceAlgorithm(loadbalanceElement, null);
                lbMembershipHandler.init(lbProperties, algorithm);
                loadbalanceEndpoint.setLoadBalanceMembershipHandler(lbMembershipHandler);
            } catch (Exception e) {
                String msg = "Could not instantiate " + "LoadBalanceMembershipHandler implementation " + clazz;
                log.error(msg, e);
                throw new SynapseException(msg, e);
            }
        }
        processProperties(loadbalanceEndpoint, epConfig);
        return loadbalanceEndpoint;
    }
    return null;
}
Also used : SynapseException(org.apache.synapse.SynapseException) QName(javax.xml.namespace.QName) OMElement(org.apache.axiom.om.OMElement) SoapSessionDispatcher(org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher) Dispatcher(org.apache.synapse.endpoints.dispatch.Dispatcher) HttpSessionDispatcher(org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher) Properties(java.util.Properties) DynamicLoadbalanceEndpoint(org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint) SynapseException(org.apache.synapse.SynapseException) LoadBalanceMembershipHandler(org.apache.synapse.core.LoadBalanceMembershipHandler) Iterator(java.util.Iterator) LoadbalanceAlgorithm(org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm) OMAttribute(org.apache.axiom.om.OMAttribute) HttpSessionDispatcher(org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher) SoapSessionDispatcher(org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher)

Example 3 with LoadBalanceMembershipHandler

use of org.apache.synapse.core.LoadBalanceMembershipHandler in project wso2-synapse by wso2.

the class DynamicLoadbalanceEndpointSerializer method serializeEndpoint.

protected OMElement serializeEndpoint(Endpoint endpoint) {
    if (!(endpoint instanceof DynamicLoadbalanceEndpoint)) {
        handleException("Invalid endpoint type.");
    }
    fac = OMAbstractFactory.getOMFactory();
    OMElement endpointElement = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
    DynamicLoadbalanceEndpoint dynamicLoadbalanceEndpoint = (DynamicLoadbalanceEndpoint) endpoint;
    // serialize the parameters
    serializeProperties(dynamicLoadbalanceEndpoint, endpointElement);
    serializeCommonAttributes(endpoint, endpointElement);
    Dispatcher dispatcher = dynamicLoadbalanceEndpoint.getDispatcher();
    if (dispatcher != null) {
        OMElement sessionElement = fac.createOMElement("session", SynapseConstants.SYNAPSE_OMNAMESPACE);
        if (dispatcher instanceof SoapSessionDispatcher) {
            sessionElement.addAttribute("type", "soap", null);
        } else if (dispatcher instanceof HttpSessionDispatcher) {
            sessionElement.addAttribute("type", "http", null);
        } else if (dispatcher instanceof SimpleClientSessionDispatcher) {
            sessionElement.addAttribute("type", "simpleClientSession", null);
        } else {
            handleException("invalid session dispatcher : " + dispatcher.getClass().getName());
        }
        long sessionTimeout = dynamicLoadbalanceEndpoint.getSessionTimeout();
        if (sessionTimeout != -1) {
            OMElement sessionTimeoutElement = fac.createOMElement("sessionTimeout", SynapseConstants.SYNAPSE_OMNAMESPACE);
            sessionTimeoutElement.setText(String.valueOf(sessionTimeout));
            sessionElement.addChild(sessionTimeoutElement);
        }
        endpointElement.addChild(sessionElement);
    }
    OMElement dynamicLoadbalanceElement = fac.createOMElement("dynamicLoadbalance", SynapseConstants.SYNAPSE_OMNAMESPACE);
    endpointElement.addChild(dynamicLoadbalanceElement);
    // set if failover is turned off in the endpoint
    if (!dynamicLoadbalanceEndpoint.isFailover()) {
        dynamicLoadbalanceElement.addAttribute("failover", "false", null);
    }
    LoadBalanceMembershipHandler loadBalanceMembershipHandler = dynamicLoadbalanceEndpoint.getLbMembershipHandler();
    dynamicLoadbalanceElement.addAttribute(XMLConfigConstants.LOADBALANCE_ALGORITHM, loadBalanceMembershipHandler.getLoadbalanceAlgorithm().getClass().getName(), null);
    OMElement membershipHandlerElement = fac.createOMElement("membershipHandler", SynapseConstants.SYNAPSE_OMNAMESPACE);
    dynamicLoadbalanceElement.addChild(membershipHandlerElement);
    membershipHandlerElement.addAttribute("class", loadBalanceMembershipHandler.getClass().getName(), null);
    Properties membershipHandlerProperties = loadBalanceMembershipHandler.getProperties();
    OMElement propertyElement;
    for (Object property : membershipHandlerProperties.keySet()) {
        propertyElement = fac.createOMElement("property", SynapseConstants.SYNAPSE_OMNAMESPACE);
        membershipHandlerElement.addChild(propertyElement);
        propertyElement.addAttribute("name", property.toString(), null);
        propertyElement.addAttribute("value", membershipHandlerProperties.getProperty((String) property), null);
    }
    return endpointElement;
}
Also used : LoadBalanceMembershipHandler(org.apache.synapse.core.LoadBalanceMembershipHandler) OMElement(org.apache.axiom.om.OMElement) HttpSessionDispatcher(org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher) SoapSessionDispatcher(org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher) Dispatcher(org.apache.synapse.endpoints.dispatch.Dispatcher) SimpleClientSessionDispatcher(org.apache.synapse.endpoints.dispatch.SimpleClientSessionDispatcher) SimpleClientSessionDispatcher(org.apache.synapse.endpoints.dispatch.SimpleClientSessionDispatcher) Properties(java.util.Properties) DynamicLoadbalanceEndpoint(org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint) HttpSessionDispatcher(org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher) SoapSessionDispatcher(org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher)

Aggregations

LoadBalanceMembershipHandler (org.apache.synapse.core.LoadBalanceMembershipHandler)3 Properties (java.util.Properties)2 OMElement (org.apache.axiom.om.OMElement)2 DynamicLoadbalanceEndpoint (org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint)2 Dispatcher (org.apache.synapse.endpoints.dispatch.Dispatcher)2 HttpSessionDispatcher (org.apache.synapse.endpoints.dispatch.HttpSessionDispatcher)2 SoapSessionDispatcher (org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher)2 Iterator (java.util.Iterator)1 QName (javax.xml.namespace.QName)1 OMAttribute (org.apache.axiom.om.OMAttribute)1 Member (org.apache.axis2.clustering.Member)1 MessageContext (org.apache.synapse.MessageContext)1 SynapseException (org.apache.synapse.SynapseException)1 SynapseEnvironment (org.apache.synapse.core.SynapseEnvironment)1 Axis2MessageContext (org.apache.synapse.core.axis2.Axis2MessageContext)1 Axis2SynapseEnvironment (org.apache.synapse.core.axis2.Axis2SynapseEnvironment)1 AlgorithmContext (org.apache.synapse.endpoints.algorithms.AlgorithmContext)1 LoadbalanceAlgorithm (org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm)1 SimpleClientSessionDispatcher (org.apache.synapse.endpoints.dispatch.SimpleClientSessionDispatcher)1 Test (org.junit.Test)1