Search in sources :

Example 16 with Member

use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.

the class DynamicLoadbalanceEndpoint method getEndpointReferenceAfterURLRewrite.

private EndpointReference getEndpointReferenceAfterURLRewrite(Member currentMember, String transport, String address, int incomingPort) {
    if (transport.startsWith("https")) {
        transport = "https";
    } else if (transport.startsWith("http")) {
        transport = "http";
    } else {
        String msg = "Cannot load balance for non-HTTP/S transport " + transport;
        log.error(msg);
        throw new SynapseException(msg);
    }
    // URL Rewrite
    if (transport.startsWith("http") || transport.startsWith("https")) {
        if (address.startsWith("http://") || address.startsWith("https://")) {
            try {
                String _address = address.indexOf("?") > 0 ? address.substring(address.indexOf("?"), address.length()) : "";
                address = new URL(address).getPath() + _address;
            } catch (MalformedURLException e) {
                String msg = "URL " + address + " is malformed";
                log.error(msg, e);
                throw new SynapseException(msg, e);
            }
        }
        int port;
        Properties memberProperties = currentMember.getProperties();
        String mappedPort = memberProperties.getProperty(PORT_MAPPING_PREFIX + incomingPort);
        if (mappedPort != null) {
            port = Integer.parseInt(mappedPort);
        } else if (transport.startsWith("https")) {
            port = currentMember.getHttpsPort();
        } else {
            port = currentMember.getHttpPort();
        }
        String remoteHost = memberProperties.getProperty("remoteHost");
        String hostName = (remoteHost == null) ? currentMember.getHostName() : remoteHost;
        return new EndpointReference(transport + "://" + hostName + ":" + port + address);
    } else {
        String msg = "Cannot load balance for non-HTTP/S transport " + transport;
        log.error(msg);
        throw new SynapseException(msg);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) SynapseException(org.apache.synapse.SynapseException) URL(java.net.URL) EndpointReference(org.apache.axis2.addressing.EndpointReference)

Example 17 with Member

use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.

the class SALSessions method updateSession.

/**
 * Update or establish a session
 *
 * @param synCtx    Synapse MessageContext
 * @param sessionID session id
 */
public void updateSession(MessageContext synCtx, String sessionID) {
    if (sessionID == null || "".equals(sessionID)) {
        if (log.isDebugEnabled()) {
            log.debug("Cannot find session ID .Returing null");
        }
        return;
    }
    boolean createSession = false;
    // if this is related to the already established session
    SessionInformation oldSession = (SessionInformation) synCtx.getProperty(SynapseConstants.PROP_SAL_CURRENT_SESSION_INFORMATION);
    List<Endpoint> endpoints = null;
    Member currentMember = null;
    if (oldSession == null) {
        if (log.isDebugEnabled()) {
            log.debug("Going to create a New session with id  " + sessionID);
        }
        endpoints = (List<Endpoint>) synCtx.getProperty(SynapseConstants.PROP_SAL_ENDPOINT_ENDPOINT_LIST);
        currentMember = (Member) synCtx.getProperty(SynapseConstants.PROP_SAL_ENDPOINT_CURRENT_MEMBER);
        createSession = true;
    } else {
        String oldSessionID = oldSession.getId();
        if (!sessionID.equals(oldSessionID)) {
            if (log.isDebugEnabled()) {
                log.debug("Renew the session : previous session id :" + oldSessionID + " new session id :" + sessionID);
            }
            removeSession(oldSessionID);
            endpoints = oldSession.getEndpointList();
            currentMember = oldSession.getMember();
            createSession = true;
        } else {
            SessionInformation information = getSessionInformation(oldSessionID);
            if (information == null) {
                // Therefore, it is recovered using session information in the message context
                if (log.isDebugEnabled()) {
                    log.debug("Recovering lost session information for session id " + sessionID);
                }
                endpoints = oldSession.getEndpointList();
                currentMember = oldSession.getMember();
                createSession = true;
            } else {
                if (log.isDebugEnabled()) {
                    log.debug("Session with id : " + sessionID + " is still live.");
                }
            }
        }
    }
    if (createSession) {
        SessionInformation newInformation;
        if (currentMember == null) {
            newInformation = createSessionInformation(synCtx, sessionID, endpoints);
        } else {
            newInformation = createSessionInformation(synCtx, sessionID, currentMember, null);
        }
        if (log.isDebugEnabled()) {
            log.debug("Establishing a session with id :" + sessionID + " and it's endpoint sequence : " + endpoints);
        }
        if (isClustered) {
            Replicator.setAndReplicateState(SESSION_IDS + sessionID, newInformation, configCtx);
        } else {
            establishedSessions.put(sessionID, newInformation);
        }
    }
}
Also used : SALoadbalanceEndpoint(org.apache.synapse.endpoints.SALoadbalanceEndpoint) IndirectEndpoint(org.apache.synapse.endpoints.IndirectEndpoint) Endpoint(org.apache.synapse.endpoints.Endpoint) DynamicLoadbalanceEndpoint(org.apache.synapse.endpoints.DynamicLoadbalanceEndpoint) Member(org.apache.axis2.clustering.Member)

Example 18 with Member

use of org.apache.axis2.clustering.Member in project wso2-synapse by wso2.

the class RecipientListEndpointTest method testSendMessageToMembers.

/**
 * Test on Sending messages to different members using RecipientListEndpoint
 */
@Test
public void testSendMessageToMembers() throws Exception {
    // perform init
    Axis2SynapseEnvironment synapseEnvironment = getMockedSynapseEnvironment();
    RecipientListEndpoint recipientListEndpoint = new RecipientListEndpoint();
    recipientListEndpoint.init(synapseEnvironment);
    Mockito.when(synapseEnvironment.createMessageContext()).thenReturn(createMessageContext());
    // set members
    Member member1 = new Member("localhost", 9000);
    Member member2 = new Member("localhost", 9001);
    ArrayList<Member> members = new ArrayList<>(2);
    members.add(member1);
    members.add(member2);
    recipientListEndpoint.setMembers(members);
    // test send message
    String samplePayload = "<test>value</test>";
    Axis2MessageContext messageContext = getMessageContext(samplePayload);
    // message will be sent to EP using this env (which is mocked and do nothing)
    messageContext.setEnvironment(synapseEnvironment);
    messageContext.setTo(new EndpointReference("http://localhost:9000/services/SimpleStockQuoteService"));
    recipientListEndpoint.sendMessage(messageContext);
}
Also used : Axis2SynapseEnvironment(org.apache.synapse.core.axis2.Axis2SynapseEnvironment) ArrayList(java.util.ArrayList) Member(org.apache.axis2.clustering.Member) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext) EndpointReference(org.apache.axis2.addressing.EndpointReference) Test(org.junit.Test)

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