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);
}
}
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);
}
}
}
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);
}
Aggregations