You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/01/09 17:39:59 UTC
[1/5] stratos git commit: Replacing signup-id with tenant-id and
introducing domain mapping stratos manager service methods and rest api
methods
Repository: stratos
Updated Branches:
refs/heads/master e54f24203 -> 8edb91a36
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/impl/StratosManagerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/impl/StratosManagerServiceImpl.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/impl/StratosManagerServiceImpl.java
index f4780df..f037d6e 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/impl/StratosManagerServiceImpl.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/impl/StratosManagerServiceImpl.java
@@ -21,12 +21,15 @@ package org.apache.stratos.manager.services.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.manager.components.ApplicationSignUpManager;
+import org.apache.stratos.manager.components.ApplicationSignUpHandler;
import org.apache.stratos.manager.components.ArtifactDistributionCoordinator;
+import org.apache.stratos.manager.components.DomainMappingHandler;
import org.apache.stratos.manager.domain.ApplicationSignUp;
import org.apache.stratos.manager.exception.ApplicationSignUpException;
import org.apache.stratos.manager.exception.ArtifactDistributionCoordinatorException;
+import org.apache.stratos.manager.exception.DomainMappingException;
import org.apache.stratos.manager.services.StratosManagerService;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
import java.util.List;
@@ -37,41 +40,58 @@ public class StratosManagerServiceImpl implements StratosManagerService {
private static final Log log = LogFactory.getLog(StratosManagerServiceImpl.class);
- private ApplicationSignUpManager signUpManager;
+ private ApplicationSignUpHandler signUpHandler;
private ArtifactDistributionCoordinator artifactDistributionCoordinator;
+ private DomainMappingHandler domainMappingHandler;
public StratosManagerServiceImpl() {
- signUpManager = new ApplicationSignUpManager();
+ signUpHandler = new ApplicationSignUpHandler();
artifactDistributionCoordinator = new ArtifactDistributionCoordinator();
+ domainMappingHandler = new DomainMappingHandler();
}
@Override
- public String addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException {
- return signUpManager.addApplicationSignUp(applicationSignUp);
+ public void addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException {
+ signUpHandler.addApplicationSignUp(applicationSignUp);
}
@Override
- public void removeApplicationSignUp(String signUpId) throws ApplicationSignUpException {
- signUpManager.removeApplicationSignUp(signUpId);
+ public void removeApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException {
+ signUpHandler.removeApplicationSignUp(applicationId, tenantId);
}
@Override
- public ApplicationSignUp getApplicationSignUp(String signUpId) throws ApplicationSignUpException {
- return signUpManager.getApplicationSignUp(signUpId);
+ public ApplicationSignUp getApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException {
+ return signUpHandler.getApplicationSignUp(applicationId, tenantId);
}
@Override
- public List<ApplicationSignUp> getApplicationSignUps(String applicationId) throws ApplicationSignUpException {
- return signUpManager.getApplicationSignUps(applicationId);
+ public ApplicationSignUp[] getApplicationSignUps(String applicationId) throws ApplicationSignUpException {
+ return signUpHandler.getApplicationSignUps(applicationId);
}
@Override
- public void notifyArtifactUpdatedEventForSignUp(String signUpId) throws ArtifactDistributionCoordinatorException {
- artifactDistributionCoordinator.notifyArtifactUpdatedEventForSignUp(signUpId);
+ public void notifyArtifactUpdatedEventForSignUp(String applicationId, int tenantId) throws ArtifactDistributionCoordinatorException {
+ artifactDistributionCoordinator.notifyArtifactUpdatedEventForSignUp(applicationId, tenantId);
}
@Override
public void notifyArtifactUpdatedEventForRepository(String repoUrl) throws ArtifactDistributionCoordinatorException {
artifactDistributionCoordinator.notifyArtifactUpdatedEventForRepository(repoUrl);
}
+
+ @Override
+ public void addDomainMapping(DomainMapping domainMapping) throws DomainMappingException {
+ domainMappingHandler.addDomainMapping(domainMapping);
+ }
+
+ @Override
+ public DomainMapping[] getDomainMappings(String applicationId, int tenantId) throws DomainMappingException {
+ return domainMappingHandler.getDomainMappings(applicationId, tenantId);
+ }
+
+ @Override
+ public void removeDomainMapping(String applicationId, int tenantId, String domainName) throws DomainMappingException {
+ domainMappingHandler.removeDomainMapping(applicationId, tenantId, domainName);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
deleted file mode 100644
index 5d73dcf..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.event.domain.mapping;
-
-import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
-import org.apache.stratos.messaging.event.Event;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * This event is fired periodically to be able for client's to initialize the current state
- * of the domain mappings.
- */
-public class CompleteDomainMappingsEvent extends Event implements Serializable {
-
- private static final long serialVersionUID = -3540099493690136278L;
-
- private final List<DomainMapping> domainMappings;
-
- public CompleteDomainMappingsEvent(List<DomainMapping> domainMappings) {
- this.domainMappings = domainMappings;
- }
-
- public List<DomainMapping> getDomainMappings() {
- return domainMappings;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
index 2a3583e..83be807 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
@@ -30,31 +30,31 @@ public class DomainMappingAddedEvent extends Event implements Serializable {
private static final long serialVersionUID = 3457484382856403382L;
- private final int tenantId;
private final String applicationId;
+ private final int tenantId;
private final String serviceName;
private final String clusterId;
private final String domainName;
private final String contextPath;
- public DomainMappingAddedEvent(int tenantId, String applicationId, String serviceName, String clusterId,
+ public DomainMappingAddedEvent(String applicationId, int tenantId, String serviceName, String clusterId,
String domainName, String contextPath) {
- this.tenantId = tenantId;
this.applicationId = applicationId;
+ this.tenantId = tenantId;
this.serviceName = serviceName;
this.clusterId = clusterId;
this.domainName = domainName;
this.contextPath = contextPath;
}
- public int getTenantId() {
- return tenantId;
- }
-
public String getApplicationId() {
return applicationId;
}
+ public int getTenantId() {
+ return tenantId;
+ }
+
public String getServiceName() {
return serviceName;
}
@@ -70,4 +70,11 @@ public class DomainMappingAddedEvent extends Event implements Serializable {
public String getContextPath() {
return contextPath;
}
+
+ @Override
+ public String toString() {
+ return String.format("[application-id] %s [tenant-id] %d [service-name] %s [cluster-id] %s [domain-name] %s " +
+ "[context-path] %s", getApplicationId(), getTenantId(), getServiceName(), getClusterId(), getDomainName(),
+ getContextPath());
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
index 9c529b1..4b9728b 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
@@ -29,29 +29,29 @@ import java.io.Serializable;
public class DomainMappingRemovedEvent extends Event implements Serializable {
private static final long serialVersionUID = -8837521344795740210L;
- private final int tenantId;
private final String applicationId;
+ private final int tenantId;
private final String serviceName;
private final String clusterId;
private final String domainName;
- public DomainMappingRemovedEvent(int tenantId, String applicationId, String serviceName,
+ public DomainMappingRemovedEvent(String applicationId, int tenantId, String serviceName,
String clusterId, String domainName) {
- this.tenantId = tenantId;
this.applicationId = applicationId;
+ this.tenantId = tenantId;
this.serviceName = serviceName;
this.clusterId = clusterId;
this.domainName = domainName;
}
- public int getTenantId() {
- return tenantId;
- }
-
public String getApplicationId() {
return applicationId;
}
+ public int getTenantId() {
+ return tenantId;
+ }
+
public String getServiceName() {
return serviceName;
}
@@ -63,4 +63,10 @@ public class DomainMappingRemovedEvent extends Event implements Serializable {
public String getDomainName() {
return domainName;
}
+
+ @Override
+ public String toString() {
+ return String.format("[application-id] %s [tenant-id] %d [service-name] %s [cluster-id] %s [domain-name] %s ",
+ getApplicationId(), getTenantId(), getServiceName(), getClusterId(), getDomainName());
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
deleted file mode 100644
index f62a3d8..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.listener.domain.mapping;
-
-import org.apache.stratos.messaging.listener.EventListener;
-
-/**
- * Complete domain mappings event listener.
- */
-public abstract class CompleteDomainMappingsEventListener extends EventListener {
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
deleted file mode 100644
index 3b20eb0..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.message.processor.domain.mapping;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.event.domain.mapping.CompleteDomainMappingsEvent;
-import org.apache.stratos.messaging.message.processor.MessageProcessor;
-import org.apache.stratos.messaging.message.receiver.domain.mapping.DomainMappingManager;
-import org.apache.stratos.messaging.util.Util;
-
-/**
- * Complete domain mappings message processor.
- */
-public class CompleteDomainMappingsMessageProcessor extends MessageProcessor {
-
- private static final Log log = LogFactory.getLog(CompleteDomainMappingsMessageProcessor.class);
-
- private MessageProcessor nextProcessor;
-
- @Override
- public void setNext(MessageProcessor nextProcessor) {
- this.nextProcessor = nextProcessor;
- }
-
- @Override
- public boolean process(String type, String message, Object object) {
- if (CompleteDomainMappingsEvent.class.getName().equals(type)) {
- // Return if domain mappings manager has already initialized
- if(DomainMappingManager.getInstance().isInitialized()) {
- return false;
- }
-
- // Parse complete message and build event
- CompleteDomainMappingsEvent event = (CompleteDomainMappingsEvent) Util.jsonToObject(message,
- CompleteDomainMappingsEvent.class);
-
- try {
- DomainMappingManager.acquireWriteLock();
- DomainMappingManager.getInstance().addDomainMappings(event.getDomainMappings());
- if(log.isInfoEnabled()) {
- log.info("Domain mappings manager initialized");
- }
- DomainMappingManager.getInstance().setInitialized(true);
-
- // Notify event listeners
- notifyEventListeners(event);
- return true;
- }
- finally {
- DomainMappingManager.releaseWriteLock();
- }
- }
- else {
- if(nextProcessor != null) {
- return nextProcessor.process(type, message, object);
- }
- else {
- throw new RuntimeException(String.format("Failed to process domain mapping event message using " +
- "available message processors: [type] %s [body] %s", type, message));
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
index dd03cd5..75a14bd 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
@@ -22,7 +22,6 @@ package org.apache.stratos.messaging.message.processor.domain.mapping;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.messaging.listener.EventListener;
-import org.apache.stratos.messaging.listener.domain.mapping.CompleteDomainMappingsEventListener;
import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingAddedEventListener;
import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingRemovedEventListener;
import org.apache.stratos.messaging.message.processor.MessageProcessorChain;
@@ -34,15 +33,11 @@ public class DomainMappingMessageProcessorChain extends MessageProcessorChain {
private static final Log log = LogFactory.getLog(DomainMappingMessageProcessorChain.class);
- private CompleteDomainMappingsMessageProcessor completeDomainMappingsMessageProcessor;
private DomainNameAddedMessageProcessor domainNameAddedMessageProcessor;
private DomainNameRemovedMessageProcessor domainNameRemovedMessageProcessor;
@Override
protected void initialize() {
- completeDomainMappingsMessageProcessor = new CompleteDomainMappingsMessageProcessor();
- add(completeDomainMappingsMessageProcessor);
-
domainNameAddedMessageProcessor = new DomainNameAddedMessageProcessor();
add(domainNameAddedMessageProcessor);
@@ -52,9 +47,7 @@ public class DomainMappingMessageProcessorChain extends MessageProcessorChain {
@Override
public void addEventListener(EventListener eventListener) {
- if (eventListener instanceof CompleteDomainMappingsEventListener) {
- completeDomainMappingsMessageProcessor.addEventListener(eventListener);
- } else if (eventListener instanceof DomainMappingAddedEventListener) {
+ if (eventListener instanceof DomainMappingAddedEventListener) {
domainNameAddedMessageProcessor.addEventListener(eventListener);
} else if (eventListener instanceof DomainMappingRemovedEventListener) {
domainNameRemovedMessageProcessor.addEventListener(eventListener);
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 43de224..4802b8a 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -413,7 +413,7 @@ public class StratosApiV41 extends AbstractApi {
}
@POST
- @Path("/applications/{applicationId}/signups")
+ @Path("/applications/{applicationId}/signup")
@Produces("application/json")
@Consumes("application/json")
@AuthorizationAction("/permission/protected/manage/monitor/tenants")
@@ -424,13 +424,13 @@ public class StratosApiV41 extends AbstractApi {
}
@GET
- @Path("/applications/{applicationId}/signups/{signUpId}")
+ @Path("/applications/{applicationId}/signup")
@Produces("application/json")
@Consumes("application/json")
@AuthorizationAction("/permission/protected/manage/monitor/tenants")
public Response getApplicationSignUp(@PathParam("applicationId") String applicationId,
@PathParam("signUpId") String signUpId) throws RestAPIException {
- ApplicationSignUpBean applicationSignUpBean = StratosApiV41Utils.getApplicationSignUp(applicationId, signUpId);
+ ApplicationSignUpBean applicationSignUpBean = StratosApiV41Utils.getApplicationSignUp(applicationId);
if (applicationSignUpBean == null) {
return Response.status(Response.Status.NOT_FOUND).build();
}
@@ -438,28 +438,15 @@ public class StratosApiV41 extends AbstractApi {
}
@DELETE
- @Path("/applications/{applicationId}/signups/{signUpId}")
+ @Path("/applications/{applicationId}/signup")
@Produces("application/json")
@Consumes("application/json")
@AuthorizationAction("/permission/protected/manage/monitor/tenants")
- public Response removeApplicationSignUp(@PathParam("applicationId") String applicationId,
- @PathParam("signUpId") String signUpId) throws RestAPIException {
- StratosApiV41Utils.removeApplicationSignUp(applicationId, signUpId);
+ public Response removeApplicationSignUp(@PathParam("applicationId") String applicationId) throws RestAPIException {
+ StratosApiV41Utils.removeApplicationSignUp(applicationId);
return Response.ok().build();
}
- @GET
- @Path("/applications/{applicationId}/signups")
- @Produces("application/json")
- @Consumes("application/json")
- @AuthorizationAction("/permission/protected/manage/monitor/tenants")
- public Response getApplicationSignUps(@PathParam("applicationId") String applicationId) throws RestAPIException {
- List<ApplicationSignUpBean> applicationSignUpBeans = StratosApiV41Utils.getApplicationSignUps(applicationId);
- ApplicationSignUpBean[] applicationSignUpBeansArray = applicationSignUpBeans.toArray(
- new ApplicationSignUpBean[applicationSignUpBeans.size()]);
- return Response.ok(applicationSignUpBeansArray).build();
- }
-
/**
* Undeploy application.
*
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index f9fabc1..cb7a4ef 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -60,6 +60,7 @@ import org.apache.stratos.messaging.message.receiver.applications.ApplicationMan
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.apache.stratos.rest.endpoint.exception.RestAPIException;
import org.apache.stratos.rest.endpoint.util.converter.ObjectConverter;
+import org.wso2.carbon.context.CarbonContext;
import java.rmi.RemoteException;
import java.util.*;
@@ -1359,18 +1360,22 @@ public class StratosApiV41Utils {
log.info(String.format("Adding application signup: [application-id] %s", applicationId));
}
+ int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
+
StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
ApplicationSignUp applicationSignUp = ObjectConverter.convertApplicationSignUpBeanToStubApplicationSignUp(applicationSignUpBean);
- String signupId = serviceClient.addApplicationSignUp(applicationSignUp);
+ applicationSignUp.setTenantId(tenantId);
+ serviceClient.addApplicationSignUp(applicationSignUp);
+
if(log.isInfoEnabled()) {
- log.info(String.format("Application signup added successfully: [application-id] %s [signup-id] %s",
- applicationId, signupId));
+ log.info(String.format("Application signup added successfully: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
}
- serviceClient.notifyArtifactUpdatedEventForSignUp(signupId);
+ serviceClient.notifyArtifactUpdatedEventForSignUp(applicationId, tenantId);
if(log.isInfoEnabled()) {
- log.info(String.format("Artifact updated event sent: [application-id] %s [signup-id] %s",
- applicationId, signupId));
+ log.info(String.format("Artifact updated event sent: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
}
} catch (Exception e) {
String message = "Error in application signup: [application-id] " + applicationId;
@@ -1379,7 +1384,7 @@ public class StratosApiV41Utils {
}
}
- public static ApplicationSignUpBean getApplicationSignUp(String applicationId, String signUpId) throws RestAPIException {
+ public static ApplicationSignUpBean getApplicationSignUp(String applicationId) throws RestAPIException {
if(StringUtils.isBlank(applicationId)) {
throw new RestAPIException("Application id is null");
}
@@ -1393,26 +1398,24 @@ public class StratosApiV41Utils {
throw new RestAPIException("Application singups not available for single-tenant applications");
}
- if(StringUtils.isBlank(signUpId)) {
- throw new RestAPIException("Signup id is null");
- }
+ int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
try {
StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
- ApplicationSignUp applicationSignUp = serviceClient.getApplicationSignUp(signUpId);
+ ApplicationSignUp applicationSignUp = serviceClient.getApplicationSignUp(applicationId, tenantId);
if(applicationSignUp != null) {
return ObjectConverter.convertStubApplicationSignUpToApplicationSignUpBean(applicationSignUp);
}
return null;
} catch (Exception e) {
- String message = String.format("Could not get application signup: [application-id] %s [sign-up] %s",
- applicationId, signUpId);
+ String message = String.format("Could not get application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId);
log.error(message, e);
throw new RestAPIException(message, e);
}
}
- public static void removeApplicationSignUp(String applicationId, String signUpId) throws RestAPIException {
+ public static void removeApplicationSignUp(String applicationId) throws RestAPIException {
if(StringUtils.isBlank(applicationId)) {
throw new RestAPIException("Application id is null");
}
@@ -1426,20 +1429,19 @@ public class StratosApiV41Utils {
throw new RestAPIException("Application singups not available for single-tenant applications");
}
- if(StringUtils.isBlank(signUpId)) {
- throw new RestAPIException("Signup id is null");
- }
+ int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
try {
StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
- serviceClient.removeApplicationSignUp(signUpId);
+ serviceClient.removeApplicationSignUp(applicationId, tenantId);
if(log.isInfoEnabled()) {
log.info(String.format("Application signup removed successfully: [application-id] %s" +
- "[signup-id] %s", applicationId, signUpId));
+ "[tenant-id] %d", applicationId, tenantId));
}
} catch (Exception e) {
- String message = "Could not remove application signup: [application-id] " + applicationId;
+ String message = String.format("Could not remove application signup: [application-id] %s [tenant-id] %d ",
+ applicationId, tenantId);
log.error(message, e);
throw new RestAPIException(message, e);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index ee6bb92..e3f18f8 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -1720,7 +1720,6 @@ public class ObjectConverter {
public static ApplicationSignUpBean convertStubApplicationSignUpToApplicationSignUpBean(ApplicationSignUp applicationSignUp) {
ApplicationSignUpBean applicationSignUpBean = new ApplicationSignUpBean();
applicationSignUpBean.setApplicationId(applicationSignUp.getApplicationId());
- applicationSignUpBean.setSignUpId(applicationSignUp.getSignUpId());
if(applicationSignUp.getArtifactRepositories() != null) {
List<ArtifactRepositoryBean> artifactRepositoryBeanList = new ArrayList<ArtifactRepositoryBean>();
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/service-stubs/org.apache.stratos.manager.service.stub/src/main/resources/StratosManagerService.wsdl
----------------------------------------------------------------------
diff --git a/service-stubs/org.apache.stratos.manager.service.stub/src/main/resources/StratosManagerService.wsdl b/service-stubs/org.apache.stratos.manager.service.stub/src/main/resources/StratosManagerService.wsdl
index 6db4f44..93e3acc 100644
--- a/service-stubs/org.apache.stratos.manager.service.stub/src/main/resources/StratosManagerService.wsdl
+++ b/service-stubs/org.apache.stratos.manager.service.stub/src/main/resources/StratosManagerService.wsdl
@@ -1,11 +1,24 @@
-<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://impl.services.manager.stratos.apache.org" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax23="http://domain.manager.stratos.apache.org/xsd" xmlns:ax21="http://exception.manager.stratos.apache.org/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.services.manager.stratos.apache.org">
+<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://impl.services.manager.stratos.apache.org" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax23="http://domain.manager.stratos.apache.org/xsd" xmlns:ax24="http://mapping.domain.domain.messaging.stratos.apache.org/xsd" xmlns:ax21="http://exception.manager.stratos.apache.org/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.services.manager.stratos.apache.org">
<wsdl:types>
- <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://domain.manager.stratos.apache.org/xsd">
+ <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://mapping.domain.domain.messaging.stratos.apache.org/xsd">
+ <xs:complexType name="DomainMapping">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="contextPath" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="domainName" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="serviceName" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:schema>
+ <xs:schema xmlns:ax25="http://mapping.domain.domain.messaging.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://domain.manager.stratos.apache.org/xsd">
+ <xs:import namespace="http://mapping.domain.domain.messaging.stratos.apache.org/xsd"/>
<xs:complexType name="ApplicationSignUp">
<xs:sequence>
<xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="artifactRepositories" nillable="true" type="ax23:ArtifactRepository"/>
- <xs:element minOccurs="0" name="signUpId" nillable="true" type="xs:string"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="domainMappings" nillable="true" type="ax25:DomainMapping"/>
<xs:element minOccurs="0" name="tenantId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
@@ -20,96 +33,143 @@
</xs:sequence>
</xs:complexType>
</xs:schema>
- <xs:schema xmlns:ax24="http://domain.manager.stratos.apache.org/xsd" xmlns:ax22="http://exception.manager.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.services.manager.stratos.apache.org">
+ <xs:schema xmlns:ax27="http://mapping.domain.domain.messaging.stratos.apache.org/xsd" xmlns:ax26="http://domain.manager.stratos.apache.org/xsd" xmlns:ax22="http://exception.manager.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.services.manager.stratos.apache.org">
<xs:import namespace="http://exception.manager.stratos.apache.org/xsd"/>
<xs:import namespace="http://domain.manager.stratos.apache.org/xsd"/>
- <xs:element name="StratosManagerServiceArtifactDistributionCoordinatorException">
+ <xs:import namespace="http://mapping.domain.domain.messaging.stratos.apache.org/xsd"/>
+ <xs:element name="StratosManagerServiceApplicationSignUpException">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="ArtifactDistributionCoordinatorException" nillable="true" type="ax21:ArtifactDistributionCoordinatorException"/>
+ <xs:element minOccurs="0" name="ApplicationSignUpException" nillable="true" type="ax21:ApplicationSignUpException"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="notifyArtifactUpdatedEventForSignUp">
+ <xs:element name="addApplicationSignUp">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="signUpId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="applicationSignUp" nillable="true" type="ax26:ApplicationSignUp"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="notifyArtifactUpdatedEventForRepository">
+ <xs:element name="removeApplicationSignUp">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="repoUrl" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="StratosManagerServiceApplicationSignUpException">
+ <xs:element name="getApplicationSignUp">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="ApplicationSignUpException" nillable="true" type="ax21:ApplicationSignUpException"/>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="removeApplicationSignUp">
+ <xs:element name="getApplicationSignUpResponse">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="signUpId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="return" nillable="true" type="ax26:ApplicationSignUp"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="getApplicationSignUp">
+ <xs:element name="getApplicationSignUps">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="getApplicationSignUpsResponse">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="signUpId" nillable="true" type="xs:string"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax26:ApplicationSignUp"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="getApplicationSignUpResponse">
+ <xs:element name="StratosManagerServiceDomainMappingException">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="return" nillable="true" type="ax23:ApplicationSignUp"/>
+ <xs:element minOccurs="0" name="DomainMappingException" nillable="true" type="ax21:DomainMappingException"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="getApplicationSignUps">
+ <xs:element name="getDomainMappings">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="getApplicationSignUpsResponse">
+ <xs:element name="getDomainMappingsResponse">
<xs:complexType>
<xs:sequence>
- <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax23:ApplicationSignUp"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax27:DomainMapping"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="addApplicationSignUp">
+ <xs:element name="removeDomainMapping">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="applicationSignUp" nillable="true" type="ax23:ApplicationSignUp"/>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
+ <xs:element minOccurs="0" name="domainName" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="addApplicationSignUpResponse">
+ <xs:element name="StratosManagerServiceArtifactDistributionCoordinatorException">
<xs:complexType>
<xs:sequence>
- <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="ArtifactDistributionCoordinatorException" nillable="true" type="ax21:ArtifactDistributionCoordinatorException"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notifyArtifactUpdatedEventForSignUp">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="applicationId" nillable="true" type="xs:string"/>
+ <xs:element minOccurs="0" name="tenantId" type="xs:int"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notifyArtifactUpdatedEventForRepository">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="repoUrl" nillable="true" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="addDomainMapping">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" name="domainMapping" nillable="true" type="ax27:DomainMapping"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://exception.manager.stratos.apache.org/xsd">
- <xs:complexType name="ArtifactDistributionCoordinatorException">
+ <xs:complexType name="ApplicationSignUpException">
<xs:sequence/>
</xs:complexType>
- <xs:complexType name="ApplicationSignUpException">
+ <xs:complexType name="DomainMappingException">
+ <xs:sequence/>
+ </xs:complexType>
+ <xs:complexType name="ArtifactDistributionCoordinatorException">
<xs:sequence/>
</xs:complexType>
</xs:schema>
</wsdl:types>
+ <wsdl:message name="getDomainMappingsRequest">
+ <wsdl:part name="parameters" element="ns:getDomainMappings"/>
+ </wsdl:message>
+ <wsdl:message name="getDomainMappingsResponse">
+ <wsdl:part name="parameters" element="ns:getDomainMappingsResponse"/>
+ </wsdl:message>
+ <wsdl:message name="StratosManagerServiceDomainMappingException">
+ <wsdl:part name="parameters" element="ns:StratosManagerServiceDomainMappingException"/>
+ </wsdl:message>
<wsdl:message name="getApplicationSignUpsRequest">
<wsdl:part name="parameters" element="ns:getApplicationSignUps"/>
</wsdl:message>
@@ -125,9 +185,15 @@
<wsdl:message name="StratosManagerServiceArtifactDistributionCoordinatorException">
<wsdl:part name="parameters" element="ns:StratosManagerServiceArtifactDistributionCoordinatorException"/>
</wsdl:message>
+ <wsdl:message name="addDomainMappingRequest">
+ <wsdl:part name="parameters" element="ns:addDomainMapping"/>
+ </wsdl:message>
<wsdl:message name="removeApplicationSignUpRequest">
<wsdl:part name="parameters" element="ns:removeApplicationSignUp"/>
</wsdl:message>
+ <wsdl:message name="removeDomainMappingRequest">
+ <wsdl:part name="parameters" element="ns:removeDomainMapping"/>
+ </wsdl:message>
<wsdl:message name="notifyArtifactUpdatedEventForRepositoryRequest">
<wsdl:part name="parameters" element="ns:notifyArtifactUpdatedEventForRepository"/>
</wsdl:message>
@@ -140,10 +206,12 @@
<wsdl:message name="addApplicationSignUpRequest">
<wsdl:part name="parameters" element="ns:addApplicationSignUp"/>
</wsdl:message>
- <wsdl:message name="addApplicationSignUpResponse">
- <wsdl:part name="parameters" element="ns:addApplicationSignUpResponse"/>
- </wsdl:message>
<wsdl:portType name="StratosManagerServicePortType">
+ <wsdl:operation name="getDomainMappings">
+ <wsdl:input message="ns:getDomainMappingsRequest" wsaw:Action="urn:getDomainMappings"/>
+ <wsdl:output message="ns:getDomainMappingsResponse" wsaw:Action="urn:getDomainMappingsResponse"/>
+ <wsdl:fault message="ns:StratosManagerServiceDomainMappingException" name="StratosManagerServiceDomainMappingException" wsaw:Action="urn:getDomainMappingsStratosManagerServiceDomainMappingException"/>
+ </wsdl:operation>
<wsdl:operation name="getApplicationSignUps">
<wsdl:input message="ns:getApplicationSignUpsRequest" wsaw:Action="urn:getApplicationSignUps"/>
<wsdl:output message="ns:getApplicationSignUpsResponse" wsaw:Action="urn:getApplicationSignUpsResponse"/>
@@ -153,10 +221,18 @@
<wsdl:input message="ns:notifyArtifactUpdatedEventForSignUpRequest" wsaw:Action="urn:notifyArtifactUpdatedEventForSignUp"/>
<wsdl:fault message="ns:StratosManagerServiceArtifactDistributionCoordinatorException" name="StratosManagerServiceArtifactDistributionCoordinatorException" wsaw:Action="urn:notifyArtifactUpdatedEventForSignUpStratosManagerServiceArtifactDistributionCoordinatorException"/>
</wsdl:operation>
+ <wsdl:operation name="addDomainMapping">
+ <wsdl:input message="ns:addDomainMappingRequest" wsaw:Action="urn:addDomainMapping"/>
+ <wsdl:fault message="ns:StratosManagerServiceDomainMappingException" name="StratosManagerServiceDomainMappingException" wsaw:Action="urn:addDomainMappingStratosManagerServiceDomainMappingException"/>
+ </wsdl:operation>
<wsdl:operation name="removeApplicationSignUp">
<wsdl:input message="ns:removeApplicationSignUpRequest" wsaw:Action="urn:removeApplicationSignUp"/>
<wsdl:fault message="ns:StratosManagerServiceApplicationSignUpException" name="StratosManagerServiceApplicationSignUpException" wsaw:Action="urn:removeApplicationSignUpStratosManagerServiceApplicationSignUpException"/>
</wsdl:operation>
+ <wsdl:operation name="removeDomainMapping">
+ <wsdl:input message="ns:removeDomainMappingRequest" wsaw:Action="urn:removeDomainMapping"/>
+ <wsdl:fault message="ns:StratosManagerServiceDomainMappingException" name="StratosManagerServiceDomainMappingException" wsaw:Action="urn:removeDomainMappingStratosManagerServiceDomainMappingException"/>
+ </wsdl:operation>
<wsdl:operation name="notifyArtifactUpdatedEventForRepository">
<wsdl:input message="ns:notifyArtifactUpdatedEventForRepositoryRequest" wsaw:Action="urn:notifyArtifactUpdatedEventForRepository"/>
<wsdl:fault message="ns:StratosManagerServiceArtifactDistributionCoordinatorException" name="StratosManagerServiceArtifactDistributionCoordinatorException" wsaw:Action="urn:notifyArtifactUpdatedEventForRepositoryStratosManagerServiceArtifactDistributionCoordinatorException"/>
@@ -168,12 +244,23 @@
</wsdl:operation>
<wsdl:operation name="addApplicationSignUp">
<wsdl:input message="ns:addApplicationSignUpRequest" wsaw:Action="urn:addApplicationSignUp"/>
- <wsdl:output message="ns:addApplicationSignUpResponse" wsaw:Action="urn:addApplicationSignUpResponse"/>
<wsdl:fault message="ns:StratosManagerServiceApplicationSignUpException" name="StratosManagerServiceApplicationSignUpException" wsaw:Action="urn:addApplicationSignUpStratosManagerServiceApplicationSignUpException"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="StratosManagerServiceSoap11Binding" type="ns:StratosManagerServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+ <wsdl:operation name="getDomainMappings">
+ <soap:operation soapAction="urn:getDomainMappings" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="getApplicationSignUps">
<soap:operation soapAction="urn:getApplicationSignUps" style="document"/>
<wsdl:input>
@@ -195,6 +282,15 @@
<soap:fault use="literal" name="StratosManagerServiceArtifactDistributionCoordinatorException"/>
</wsdl:fault>
</wsdl:operation>
+ <wsdl:operation name="addDomainMapping">
+ <soap:operation soapAction="urn:addDomainMapping" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="removeApplicationSignUp">
<soap:operation soapAction="urn:removeApplicationSignUp" style="document"/>
<wsdl:input>
@@ -204,6 +300,15 @@
<soap:fault use="literal" name="StratosManagerServiceApplicationSignUpException"/>
</wsdl:fault>
</wsdl:operation>
+ <wsdl:operation name="removeDomainMapping">
+ <soap:operation soapAction="urn:removeDomainMapping" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="notifyArtifactUpdatedEventForRepository">
<soap:operation soapAction="urn:notifyArtifactUpdatedEventForRepository" style="document"/>
<wsdl:input>
@@ -230,9 +335,6 @@
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
- <wsdl:output>
- <soap:body use="literal"/>
- </wsdl:output>
<wsdl:fault name="StratosManagerServiceApplicationSignUpException">
<soap:fault use="literal" name="StratosManagerServiceApplicationSignUpException"/>
</wsdl:fault>
@@ -240,6 +342,18 @@
</wsdl:binding>
<wsdl:binding name="StratosManagerServiceSoap12Binding" type="ns:StratosManagerServicePortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+ <wsdl:operation name="getDomainMappings">
+ <soap12:operation soapAction="urn:getDomainMappings" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal"/>
+ </wsdl:output>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap12:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="getApplicationSignUps">
<soap12:operation soapAction="urn:getApplicationSignUps" style="document"/>
<wsdl:input>
@@ -261,6 +375,15 @@
<soap12:fault use="literal" name="StratosManagerServiceArtifactDistributionCoordinatorException"/>
</wsdl:fault>
</wsdl:operation>
+ <wsdl:operation name="addDomainMapping">
+ <soap12:operation soapAction="urn:addDomainMapping" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap12:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="removeApplicationSignUp">
<soap12:operation soapAction="urn:removeApplicationSignUp" style="document"/>
<wsdl:input>
@@ -270,6 +393,15 @@
<soap12:fault use="literal" name="StratosManagerServiceApplicationSignUpException"/>
</wsdl:fault>
</wsdl:operation>
+ <wsdl:operation name="removeDomainMapping">
+ <soap12:operation soapAction="urn:removeDomainMapping" style="document"/>
+ <wsdl:input>
+ <soap12:body use="literal"/>
+ </wsdl:input>
+ <wsdl:fault name="StratosManagerServiceDomainMappingException">
+ <soap12:fault use="literal" name="StratosManagerServiceDomainMappingException"/>
+ </wsdl:fault>
+ </wsdl:operation>
<wsdl:operation name="notifyArtifactUpdatedEventForRepository">
<soap12:operation soapAction="urn:notifyArtifactUpdatedEventForRepository" style="document"/>
<wsdl:input>
@@ -296,9 +428,6 @@
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
- <wsdl:output>
- <soap12:body use="literal"/>
- </wsdl:output>
<wsdl:fault name="StratosManagerServiceApplicationSignUpException">
<soap12:fault use="literal" name="StratosManagerServiceApplicationSignUpException"/>
</wsdl:fault>
@@ -306,6 +435,15 @@
</wsdl:binding>
<wsdl:binding name="StratosManagerServiceHttpBinding" type="ns:StratosManagerServicePortType">
<http:binding verb="POST"/>
+ <wsdl:operation name="getDomainMappings">
+ <http:operation location="getDomainMappings"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="parameters"/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content type="text/xml" part="parameters"/>
+ </wsdl:output>
+ </wsdl:operation>
<wsdl:operation name="getApplicationSignUps">
<http:operation location="getApplicationSignUps"/>
<wsdl:input>
@@ -321,12 +459,24 @@
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
</wsdl:operation>
+ <wsdl:operation name="addDomainMapping">
+ <http:operation location="addDomainMapping"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="parameters"/>
+ </wsdl:input>
+ </wsdl:operation>
<wsdl:operation name="removeApplicationSignUp">
<http:operation location="removeApplicationSignUp"/>
<wsdl:input>
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
</wsdl:operation>
+ <wsdl:operation name="removeDomainMapping">
+ <http:operation location="removeDomainMapping"/>
+ <wsdl:input>
+ <mime:content type="text/xml" part="parameters"/>
+ </wsdl:input>
+ </wsdl:operation>
<wsdl:operation name="notifyArtifactUpdatedEventForRepository">
<http:operation location="notifyArtifactUpdatedEventForRepository"/>
<wsdl:input>
@@ -347,9 +497,6 @@
<wsdl:input>
<mime:content type="text/xml" part="parameters"/>
</wsdl:input>
- <wsdl:output>
- <mime:content type="text/xml" part="parameters"/>
- </wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="StratosManagerService">
[5/5] stratos git commit: Introducing domain mapping messaging events,
listeners, processors, receiver & manager
Posted by im...@apache.org.
Introducing domain mapping messaging events, listeners, processors, receiver & manager
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1b749533
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1b749533
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1b749533
Branch: refs/heads/master
Commit: 1b749533efcdcd8d8e59e0989c5a38ef632d99fd
Parents: e54f242
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu Jan 8 18:52:50 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Fri Jan 9 22:09:46 2015 +0530
----------------------------------------------------------------------
.../domain/domain/mapping/DomainMapping.java | 71 ++++++++
.../mapping/CompleteDomainMappingsEvent.java | 45 +++++
.../domain/mapping/DomainMappingAddedEvent.java | 73 ++++++++
.../mapping/DomainMappingRemovedEvent.java | 66 +++++++
.../tenant/SubscriptionDomainAddedEvent.java | 67 -------
.../tenant/SubscriptionDomainRemovedEvent.java | 60 -------
.../tenant/SubscriptionDomainsAddedEvent.java | 60 -------
.../tenant/SubscriptionDomainsRemovedEvent.java | 60 -------
.../CompleteDomainMappingsEventListener.java | 28 +++
.../DomainMappingAddedEventListener.java | 28 +++
.../DomainMappingRemovedEventListener.java | 28 +++
.../SubscriptionDomainsAddedEventListener.java | 28 ---
...SubscriptionDomainsRemovedEventListener.java | 28 ---
.../CompleteDomainMappingsMessageProcessor.java | 81 +++++++++
.../DomainMappingMessageProcessorChain.java | 66 +++++++
.../DomainNameAddedMessageProcessor.java | 119 ++++++++++++
.../DomainNameRemovedMessageProcessor.java | 132 ++++++++++++++
...SubscriptionDomainAddedMessageProcessor.java | 100 -----------
...bscriptionDomainRemovedMessageProcessor.java | 97 ----------
.../tenant/TenantMessageProcessorChain.java | 14 +-
.../DomainMappingEventMessageDelegator.java | 93 ++++++++++
.../DomainMappingEventMessageListener.java | 55 ++++++
.../mapping/DomainMappingEventMessageQueue.java | 29 +++
.../mapping/DomainMappingEventReceiver.java | 91 ++++++++++
.../domain/mapping/DomainMappingManager.java | 180 +++++++++++++++++++
.../receiver/tenant/TenantEventReceiver.java | 1 -
.../topology/TopologyEventMessageDelegator.java | 1 +
.../topology/TopologyEventReceiver.java | 2 +
.../org/apache/stratos/messaging/util/Util.java | 3 +-
29 files changed, 1191 insertions(+), 515 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/domain/mapping/DomainMapping.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/domain/mapping/DomainMapping.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/domain/mapping/DomainMapping.java
new file mode 100644
index 0000000..6ac9e63
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/domain/mapping/DomainMapping.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.domain.domain.mapping;
+
+import java.io.Serializable;
+
+/**
+ * Domain mapping definition.
+ */
+public class DomainMapping implements Serializable {
+
+ private static final long serialVersionUID = -3718485901172753504L;
+
+ private final int tenantId;
+ private final String applicationId;
+ private final String serviceName;
+ private final String clusterId;
+ private final String domainName;
+ private final String contextPath;
+
+ public DomainMapping(int tenantId, String applicationId, String serviceName, String clusterId,
+ String domainName, String contextPath) {
+ this.tenantId = tenantId;
+ this.applicationId = applicationId;
+ this.serviceName = serviceName;
+ this.clusterId = clusterId;
+ this.domainName = domainName;
+ this.contextPath = contextPath;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public String getApplicationId() {
+ return applicationId;
+ }
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ public String getClusterId() {
+ return clusterId;
+ }
+
+ public String getDomainName() {
+ return domainName;
+ }
+
+ public String getContextPath() {
+ return contextPath;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
new file mode 100644
index 0000000..5d73dcf
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/CompleteDomainMappingsEvent.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.event.domain.mapping;
+
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+import org.apache.stratos.messaging.event.Event;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * This event is fired periodically to be able for client's to initialize the current state
+ * of the domain mappings.
+ */
+public class CompleteDomainMappingsEvent extends Event implements Serializable {
+
+ private static final long serialVersionUID = -3540099493690136278L;
+
+ private final List<DomainMapping> domainMappings;
+
+ public CompleteDomainMappingsEvent(List<DomainMapping> domainMappings) {
+ this.domainMappings = domainMappings;
+ }
+
+ public List<DomainMapping> getDomainMappings() {
+ return domainMappings;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
new file mode 100644
index 0000000..2a3583e
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingAddedEvent.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.event.domain.mapping;
+
+import org.apache.stratos.messaging.event.Event;
+
+import java.io.Serializable;
+
+/**
+ * This event is fired when a domain name is added.
+ */
+public class DomainMappingAddedEvent extends Event implements Serializable {
+
+ private static final long serialVersionUID = 3457484382856403382L;
+
+ private final int tenantId;
+ private final String applicationId;
+ private final String serviceName;
+ private final String clusterId;
+ private final String domainName;
+ private final String contextPath;
+
+ public DomainMappingAddedEvent(int tenantId, String applicationId, String serviceName, String clusterId,
+ String domainName, String contextPath) {
+ this.tenantId = tenantId;
+ this.applicationId = applicationId;
+ this.serviceName = serviceName;
+ this.clusterId = clusterId;
+ this.domainName = domainName;
+ this.contextPath = contextPath;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public String getApplicationId() {
+ return applicationId;
+ }
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ public String getClusterId() {
+ return clusterId;
+ }
+
+ public String getDomainName() {
+ return domainName;
+ }
+
+ public String getContextPath() {
+ return contextPath;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
new file mode 100644
index 0000000..9c529b1
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/domain/mapping/DomainMappingRemovedEvent.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.event.domain.mapping;
+
+import org.apache.stratos.messaging.event.Event;
+
+import java.io.Serializable;
+
+/**
+ * This event is fired when a domain name is removed.
+ */
+public class DomainMappingRemovedEvent extends Event implements Serializable {
+ private static final long serialVersionUID = -8837521344795740210L;
+
+ private final int tenantId;
+ private final String applicationId;
+ private final String serviceName;
+ private final String clusterId;
+ private final String domainName;
+
+ public DomainMappingRemovedEvent(int tenantId, String applicationId, String serviceName,
+ String clusterId, String domainName) {
+ this.tenantId = tenantId;
+ this.applicationId = applicationId;
+ this.serviceName = serviceName;
+ this.clusterId = clusterId;
+ this.domainName = domainName;
+ }
+
+ public int getTenantId() {
+ return tenantId;
+ }
+
+ public String getApplicationId() {
+ return applicationId;
+ }
+
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ public String getClusterId() {
+ return clusterId;
+ }
+
+ public String getDomainName() {
+ return domainName;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainAddedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainAddedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainAddedEvent.java
deleted file mode 100644
index e2b87d4..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainAddedEvent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.event.tenant;
-
-import org.apache.stratos.messaging.event.Event;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * This event is fired when domains are added to a tenant subscription.
- */
-public class SubscriptionDomainAddedEvent extends Event implements Serializable {
- private static final long serialVersionUID = 3457484382856403382L;
-
- private final int tenantId;
- private final String serviceName;
- private final Set<String> clusterIds;
- private final String domainName;
- private final String applicationContext;
-
- public SubscriptionDomainAddedEvent(int tenantId, String serviceName, Set<String> clusterIds, String domainName,
- String applicationContext) {
- this.tenantId = tenantId;
- this.serviceName = serviceName;
- this.clusterIds = clusterIds;
- this.domainName = domainName;
- this.applicationContext = applicationContext;
- }
-
- public int getTenantId() {
- return tenantId;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public Set<String> getClusterIds() {
- return Collections.unmodifiableSet(clusterIds);
- }
-
- public String getDomainName() {
- return domainName;
- }
-
- public String getApplicationContext() {
- return applicationContext;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainRemovedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainRemovedEvent.java
deleted file mode 100644
index b3d9578..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainRemovedEvent.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.event.tenant;
-
-import org.apache.stratos.messaging.event.Event;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * This event is fired when domains are removed from a tenant subscription.
- */
-public class SubscriptionDomainRemovedEvent extends Event implements Serializable {
- private static final long serialVersionUID = -8837521344795740210L;
-
- private final int tenantId;
- private final String serviceName;
- private final Set<String> clusterIds;
- private final String domainName;
-
- public SubscriptionDomainRemovedEvent(int tenantId, String serviceName, Set<String> clusterIds, String domainName) {
- this.tenantId = tenantId;
- this.serviceName = serviceName;
- this.clusterIds = clusterIds;
- this.domainName = domainName;
- }
-
- public int getTenantId() {
- return tenantId;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public Set<String> getClusterIds() {
- return Collections.unmodifiableSet(clusterIds);
- }
-
- public String getDomainName() {
- return domainName;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java
deleted file mode 100644
index 312571a..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsAddedEvent.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.event.tenant;
-
-import org.apache.stratos.messaging.event.Event;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * This event is fired when domains are added to a tenant subscription.
- */
-public class SubscriptionDomainsAddedEvent extends Event implements Serializable {
- private static final long serialVersionUID = 3457484382856403382L;
-
- private final int tenantId;
- private final String serviceName;
- private final Set<String> clusterIds;
- private final Set<String> domains;
-
- public SubscriptionDomainsAddedEvent(int tenantId, String serviceName, Set<String> clusterIds, Set<String> domains) {
- this.tenantId = tenantId;
- this.serviceName = serviceName;
- this.clusterIds = clusterIds;
- this.domains = (domains != null) ? domains : new HashSet<String>();
- }
-
- public int getTenantId() {
- return tenantId;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public Set<String> getClusterIds() {
- return Collections.unmodifiableSet(clusterIds);
- }
-
- public Set<String> getDomains() {
- return Collections.unmodifiableSet(domains);
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java
deleted file mode 100644
index 3cc5664..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/tenant/SubscriptionDomainsRemovedEvent.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.event.tenant;
-
-import org.apache.stratos.messaging.event.Event;
-
-import java.io.Serializable;
-import java.util.*;
-
-/**
- * This event is fired when domains are removed from a tenant subscription.
- */
-public class SubscriptionDomainsRemovedEvent extends Event implements Serializable {
- private static final long serialVersionUID = -8837521344795740210L;
-
- private final int tenantId;
- private final String serviceName;
- private final Set<String> clusterIds;
- private Set<String> domains;
-
- public SubscriptionDomainsRemovedEvent(int tenantId, String serviceName, Set<String> clusterIds, Set<String> domains) {
- this.tenantId = tenantId;
- this.serviceName = serviceName;
- this.clusterIds = clusterIds;
- this.domains = (domains != null) ? domains : new HashSet<String>();
- }
-
- public int getTenantId() {
- return tenantId;
- }
-
- public String getServiceName() {
- return serviceName;
- }
-
- public Set<String> getClusterIds() {
- return Collections.unmodifiableSet(clusterIds);
- }
-
- public Set<String> getDomains() {
- return Collections.unmodifiableSet(domains);
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
new file mode 100644
index 0000000..f62a3d8
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/CompleteDomainMappingsEventListener.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.listener.domain.mapping;
+
+import org.apache.stratos.messaging.listener.EventListener;
+
+/**
+ * Complete domain mappings event listener.
+ */
+public abstract class CompleteDomainMappingsEventListener extends EventListener {
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingAddedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingAddedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingAddedEventListener.java
new file mode 100644
index 0000000..51910a8
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingAddedEventListener.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.listener.domain.mapping;
+
+import org.apache.stratos.messaging.listener.EventListener;
+
+/**
+ * Domain name added event listener.
+ */
+public abstract class DomainMappingAddedEventListener extends EventListener {
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingRemovedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingRemovedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingRemovedEventListener.java
new file mode 100644
index 0000000..7e3406e
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/domain/mapping/DomainMappingRemovedEventListener.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.listener.domain.mapping;
+
+import org.apache.stratos.messaging.listener.EventListener;
+
+/**
+ * Domain name removed event listener.
+ */
+public abstract class DomainMappingRemovedEventListener extends EventListener {
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java
deleted file mode 100644
index 3f169b7..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsAddedEventListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.listener.tenant;
-
-import org.apache.stratos.messaging.listener.EventListener;
-
-/**
- * Tenant subscription domains added event listener.
- */
-public abstract class SubscriptionDomainsAddedEventListener extends EventListener {
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java
deleted file mode 100644
index 5c81ad6..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/tenant/SubscriptionDomainsRemovedEventListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.listener.tenant;
-
-import org.apache.stratos.messaging.listener.EventListener;
-
-/**
- * Tenant subscription domains removed event listener.
- */
-public abstract class SubscriptionDomainsRemovedEventListener extends EventListener {
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
new file mode 100644
index 0000000..3b20eb0
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/CompleteDomainMappingsMessageProcessor.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.processor.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.event.domain.mapping.CompleteDomainMappingsEvent;
+import org.apache.stratos.messaging.message.processor.MessageProcessor;
+import org.apache.stratos.messaging.message.receiver.domain.mapping.DomainMappingManager;
+import org.apache.stratos.messaging.util.Util;
+
+/**
+ * Complete domain mappings message processor.
+ */
+public class CompleteDomainMappingsMessageProcessor extends MessageProcessor {
+
+ private static final Log log = LogFactory.getLog(CompleteDomainMappingsMessageProcessor.class);
+
+ private MessageProcessor nextProcessor;
+
+ @Override
+ public void setNext(MessageProcessor nextProcessor) {
+ this.nextProcessor = nextProcessor;
+ }
+
+ @Override
+ public boolean process(String type, String message, Object object) {
+ if (CompleteDomainMappingsEvent.class.getName().equals(type)) {
+ // Return if domain mappings manager has already initialized
+ if(DomainMappingManager.getInstance().isInitialized()) {
+ return false;
+ }
+
+ // Parse complete message and build event
+ CompleteDomainMappingsEvent event = (CompleteDomainMappingsEvent) Util.jsonToObject(message,
+ CompleteDomainMappingsEvent.class);
+
+ try {
+ DomainMappingManager.acquireWriteLock();
+ DomainMappingManager.getInstance().addDomainMappings(event.getDomainMappings());
+ if(log.isInfoEnabled()) {
+ log.info("Domain mappings manager initialized");
+ }
+ DomainMappingManager.getInstance().setInitialized(true);
+
+ // Notify event listeners
+ notifyEventListeners(event);
+ return true;
+ }
+ finally {
+ DomainMappingManager.releaseWriteLock();
+ }
+ }
+ else {
+ if(nextProcessor != null) {
+ return nextProcessor.process(type, message, object);
+ }
+ else {
+ throw new RuntimeException(String.format("Failed to process domain mapping event message using " +
+ "available message processors: [type] %s [body] %s", type, message));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
new file mode 100644
index 0000000..dd03cd5
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainMappingMessageProcessorChain.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.processor.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.listener.EventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.CompleteDomainMappingsEventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingAddedEventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingRemovedEventListener;
+import org.apache.stratos.messaging.message.processor.MessageProcessorChain;
+
+/**
+ * Domain mapping message processor chain.
+ */
+public class DomainMappingMessageProcessorChain extends MessageProcessorChain {
+
+ private static final Log log = LogFactory.getLog(DomainMappingMessageProcessorChain.class);
+
+ private CompleteDomainMappingsMessageProcessor completeDomainMappingsMessageProcessor;
+ private DomainNameAddedMessageProcessor domainNameAddedMessageProcessor;
+ private DomainNameRemovedMessageProcessor domainNameRemovedMessageProcessor;
+
+ @Override
+ protected void initialize() {
+ completeDomainMappingsMessageProcessor = new CompleteDomainMappingsMessageProcessor();
+ add(completeDomainMappingsMessageProcessor);
+
+ domainNameAddedMessageProcessor = new DomainNameAddedMessageProcessor();
+ add(domainNameAddedMessageProcessor);
+
+ domainNameRemovedMessageProcessor = new DomainNameRemovedMessageProcessor();
+ add(domainNameRemovedMessageProcessor);
+ }
+
+ @Override
+ public void addEventListener(EventListener eventListener) {
+ if (eventListener instanceof CompleteDomainMappingsEventListener) {
+ completeDomainMappingsMessageProcessor.addEventListener(eventListener);
+ } else if (eventListener instanceof DomainMappingAddedEventListener) {
+ domainNameAddedMessageProcessor.addEventListener(eventListener);
+ } else if (eventListener instanceof DomainMappingRemovedEventListener) {
+ domainNameRemovedMessageProcessor.addEventListener(eventListener);
+ }
+ else {
+ throw new RuntimeException("Unknown event listener");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameAddedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameAddedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameAddedMessageProcessor.java
new file mode 100644
index 0000000..c87c48f
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameAddedMessageProcessor.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.processor.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+import org.apache.stratos.messaging.domain.tenant.Tenant;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.message.processor.MessageProcessor;
+import org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
+import org.apache.stratos.messaging.message.receiver.domain.mapping.DomainMappingManager;
+import org.apache.stratos.messaging.message.receiver.tenant.TenantManager;
+import org.apache.stratos.messaging.util.Util;
+
+/**
+ * Url mapping added message processor.
+ */
+public class DomainNameAddedMessageProcessor extends MessageProcessor {
+
+ private static final Log log = LogFactory.getLog(DomainNameAddedMessageProcessor.class);
+
+ private MessageProcessor nextProcessor;
+
+ @Override
+ public void setNext(MessageProcessor nextProcessor) {
+ this.nextProcessor = nextProcessor;
+ }
+
+ @Override
+ public boolean process(String type, String message, Object object) {
+ if (DomainMappingAddedEvent.class.getName().equals(type)) {
+
+ // Return if domain mapping manager has not initialized
+ if (!DomainMappingManager.getInstance().isInitialized()) {
+ return false;
+ }
+
+ // Parse complete message and build event
+ DomainMappingAddedEvent event = (DomainMappingAddedEvent) Util.jsonToObject(message, DomainMappingAddedEvent.class);
+
+ int tenantId = event.getTenantId();
+ String applicationId = event.getApplicationId();
+
+ try {
+ TenantManager.acquireReadLock();
+ Tenant tenant = TenantManager.getInstance().getTenant(tenantId);
+ if (tenant == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Tenant not found: [tenant-id] %d", tenantId));
+ }
+ return false;
+ }
+
+ ApplicationManager.acquireReadLockForApplication(applicationId);
+ Application application = ApplicationManager.getApplications().getApplication(applicationId);
+ if (application == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Application not found: [application-id] %d", applicationId));
+ }
+ return false;
+ }
+
+ try {
+ DomainMappingManager.acquireWriteLock();
+ DomainMapping domainMapping = new DomainMapping(event.getTenantId(), event.getApplicationId(),
+ event.getServiceName(), event.getClusterId(), event.getDomainName(), event.getContextPath());
+ DomainMappingManager.getInstance().addDomainMapping(domainMapping);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping added: [application-id] %s [cluster-id] %s " +
+ "[domain-name]", event.getApplicationId(), event.getClusterId(), event.getDomainName()));
+ }
+
+ // Notify event listeners
+ notifyEventListeners(event);
+ return true;
+ } catch (Exception e) {
+ String error = String.format("Could not add domain mapping: [application-id] %s [cluster-id] %s " +
+ "[domain-name]", event.getApplicationId(), event.getClusterId(), event.getDomainName());
+ log.error(error, e);
+ return false;
+ } finally {
+ DomainMappingManager.releaseWriteLock();
+ }
+ }
+ finally {
+ ApplicationManager.releaseReadLockForApplication(applicationId);
+ TenantManager.releaseReadLock();
+ }
+ }
+ else {
+ if (nextProcessor != null) {
+ return nextProcessor.process(type, message, object);
+ } else {
+ throw new RuntimeException(String.format("Failed to process domain mapping using available " +
+ "message processors: [type] %s [body] %s", type, message));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameRemovedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameRemovedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameRemovedMessageProcessor.java
new file mode 100644
index 0000000..f0c22ef
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/domain/mapping/DomainNameRemovedMessageProcessor.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.processor.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+import org.apache.stratos.messaging.domain.tenant.Subscription;
+import org.apache.stratos.messaging.domain.tenant.Tenant;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
+import org.apache.stratos.messaging.message.processor.MessageProcessor;
+import org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
+import org.apache.stratos.messaging.message.receiver.domain.mapping.DomainMappingManager;
+import org.apache.stratos.messaging.message.receiver.tenant.TenantManager;
+import org.apache.stratos.messaging.util.Util;
+
+/**
+ * Subscription domain removed message processor for removing domains from tenant subscriptions.
+ */
+public class DomainNameRemovedMessageProcessor extends MessageProcessor {
+
+ private static final Log log = LogFactory.getLog(DomainNameRemovedMessageProcessor.class);
+
+ private MessageProcessor nextProcessor;
+
+ @Override
+ public void setNext(MessageProcessor nextProcessor) {
+ this.nextProcessor = nextProcessor;
+ }
+
+ @Override
+ public boolean process(String type, String message, Object object) {
+ if (DomainMappingRemovedEvent.class.getName().equals(type)) {
+
+ // Return if domain mapping manager has not initialized
+ if (!DomainMappingManager.getInstance().isInitialized()) {
+ return false;
+ }
+
+ // Parse complete message and build event
+ DomainMappingRemovedEvent event = (DomainMappingRemovedEvent) Util.jsonToObject(message, DomainMappingRemovedEvent.class);
+
+ int tenantId = event.getTenantId();
+ String applicationId = event.getApplicationId();
+
+ try {
+ TenantManager.acquireWriteLock();
+ Tenant tenant = TenantManager.getInstance().getTenant(tenantId);
+ if(tenant == null) {
+ if(log.isWarnEnabled()) {
+ log.warn(String.format("Tenant not found: [tenant-id] %d", event.getTenantId()));
+ }
+ return false;
+ }
+
+ ApplicationManager.acquireReadLockForApplication(applicationId);
+ Application application = ApplicationManager.getApplications().getApplication(applicationId);
+ if (application == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Application not found: [application-id] %d", applicationId));
+ }
+ return false;
+ }
+
+ try {
+ DomainMappingManager.acquireReadLock();
+ DomainMapping domainMapping = DomainMappingManager.getInstance().getDomainMapping(
+ event.getClusterId(), event.getDomainName());
+ if(domainMapping == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Domain mapping not found: [application-id] %s [cluster-id] %s " +
+ "[domain-name]", event.getApplicationId(), event.getClusterId(),
+ event.getDomainName()));
+ }
+ return false;
+ }
+ } finally {
+ DomainMappingManager.releaseReadLock();
+ }
+
+ try {
+ DomainMappingManager.acquireWriteLock();
+ DomainMappingManager.getInstance().removeDomainMapping(event.getClusterId(), event.getDomainName());
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping removed: [application-id] %s [cluster-id] %s [domain-name]",
+ event.getApplicationId(), event.getClusterId(), event.getDomainName()));
+ }
+
+ // Notify event listeners
+ notifyEventListeners(event);
+ return true;
+ } catch (Exception e) {
+ String error = String.format("Could not remove domain mapping: [application-id] %s [cluster-id] %s " +
+ "[domain-name]", event.getApplicationId(), event.getClusterId(), event.getDomainName());
+ log.error(error, e);
+ return false;
+ } finally {
+ DomainMappingManager.releaseWriteLock();
+ }
+ }
+ finally {
+ TenantManager.releaseWriteLock();
+ }
+ }
+ else {
+ if (nextProcessor != null) {
+ return nextProcessor.process(type, message, object);
+ } else {
+ throw new RuntimeException(String.format("Failed to process tenant message using available message processors: [type] %s [body] %s", type, message));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainAddedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainAddedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainAddedMessageProcessor.java
deleted file mode 100644
index a185cd2..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainAddedMessageProcessor.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.message.processor.tenant;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.tenant.Subscription;
-import org.apache.stratos.messaging.domain.tenant.SubscriptionDomain;
-import org.apache.stratos.messaging.domain.tenant.Tenant;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
-import org.apache.stratos.messaging.message.processor.MessageProcessor;
-import org.apache.stratos.messaging.message.receiver.tenant.TenantManager;
-import org.apache.stratos.messaging.util.Util;
-
-/**
- * Subscription domain added message processor for adding domains to tenant subscriptions.
- */
-public class SubscriptionDomainAddedMessageProcessor extends MessageProcessor {
-
- private static final Log log = LogFactory.getLog(SubscriptionDomainAddedMessageProcessor.class);
-
- private MessageProcessor nextProcessor;
-
- @Override
- public void setNext(MessageProcessor nextProcessor) {
- this.nextProcessor = nextProcessor;
- }
-
- @Override
- public boolean process(String type, String message, Object object) {
- if (SubscriptionDomainAddedEvent.class.getName().equals(type)) {
- // Return if tenant manager has not initialized
-
- if (!TenantManager.getInstance().isInitialized()) {
- return false;
- }
-
- // Parse complete message and build event
- SubscriptionDomainAddedEvent event = (SubscriptionDomainAddedEvent) Util.jsonToObject(message, SubscriptionDomainAddedEvent.class);
-
- try {
- TenantManager.acquireWriteLock();
- Tenant tenant = TenantManager.getInstance().getTenant(event.getTenantId());
-
- if (tenant == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Tenant not found: [tenant-id] %d", event.getTenantId()));
- }
- return false;
- }
- Subscription subscription = tenant.getSubscription(event.getServiceName());
- if (subscription == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Subscription not found: [tenant-id] %d", event.getTenantId()));
- }
- return false;
- }
- subscription.addSubscriptionDomain(new SubscriptionDomain(event.getDomainName(), event.getApplicationContext()));
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Domain added to tenant subscription: [tenant-id] %d [tenant-domain] %s " +
- "[service] %s [domain-name] %s [application-context] %s", tenant.getTenantId(),
- tenant.getTenantDomain(), event.getServiceName(), event.getDomainName(), event.getApplicationContext()
- ));
- }
-
- // Notify event listeners
- notifyEventListeners(event);
- return true;
- }
- finally {
- TenantManager.releaseWriteLock();
- }
- }
- else {
- if (nextProcessor != null) {
- return nextProcessor.process(type, message, object);
- } else {
- throw new RuntimeException(String.format("Failed to process tenant message using available message processors: [type] %s [body] %s", type, message));
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainRemovedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainRemovedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainRemovedMessageProcessor.java
deleted file mode 100644
index 88b3690..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/SubscriptionDomainRemovedMessageProcessor.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.messaging.message.processor.tenant;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.tenant.Subscription;
-import org.apache.stratos.messaging.domain.tenant.Tenant;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
-import org.apache.stratos.messaging.message.processor.MessageProcessor;
-import org.apache.stratos.messaging.message.receiver.tenant.TenantManager;
-import org.apache.stratos.messaging.util.Util;
-
-/**
- * Subscription domain removed message processor for removing domains from tenant subscriptions.
- */
-public class SubscriptionDomainRemovedMessageProcessor extends MessageProcessor {
-
- private static final Log log = LogFactory.getLog(SubscriptionDomainRemovedMessageProcessor.class);
-
- private MessageProcessor nextProcessor;
-
- @Override
- public void setNext(MessageProcessor nextProcessor) {
- this.nextProcessor = nextProcessor;
- }
-
- @Override
- public boolean process(String type, String message, Object object) {
- if (SubscriptionDomainRemovedEvent.class.getName().equals(type)) {
- // Return if tenant manager has not initialized
- if (!TenantManager.getInstance().isInitialized()) {
- return false;
- }
-
- // Parse complete message and build event
- SubscriptionDomainRemovedEvent event = (SubscriptionDomainRemovedEvent) Util.jsonToObject(message, SubscriptionDomainRemovedEvent.class);
-
- try {
- TenantManager.acquireWriteLock();
- Tenant tenant = TenantManager.getInstance().getTenant(event.getTenantId());
- if(tenant == null) {
- if(log.isWarnEnabled()) {
- log.warn(String.format("Tenant not found: [tenant-id] %d", event.getTenantId()));
- }
- return false;
- }
- Subscription subscription = tenant.getSubscription(event.getServiceName());
-
- if (subscription == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Subscription not found: [tenant-id] %d", event.getTenantId()));
- }
- return false;
- }
- subscription.removeSubscriptionDomain(event.getDomainName());
- if(log.isInfoEnabled()) {
- log.info(String.format("Domain removed from tenant subscription: [tenant-id] %d [tenant-domain] %s " +
- "[service] %s [domain-name] %s", tenant.getTenantId(), tenant.getTenantDomain(),
- event.getServiceName(), event.getDomainName()));
-
- }
-
- // Notify event listeners
- notifyEventListeners(event);
- return true;
- }
- finally {
- TenantManager.releaseWriteLock();
- }
- }
- else {
- if (nextProcessor != null) {
- return nextProcessor.process(type, message, object);
- } else {
- throw new RuntimeException(String.format("Failed to process tenant message using available message processors: [type] %s [body] %s", type, message));
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/TenantMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/TenantMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/TenantMessageProcessorChain.java
index b5edfc1..5ab8af8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/TenantMessageProcessorChain.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/tenant/TenantMessageProcessorChain.java
@@ -37,11 +37,9 @@ public class TenantMessageProcessorChain extends MessageProcessorChain {
private TenantRemovedMessageProcessor tenantRemovedMessageProcessor;
private TenantSubscribedMessageProcessor tenantSubscribedMessageProcessor;
private TenantUnSubscribedMessageProcessor tenantUnSubscribedMessageProcessor;
- private SubscriptionDomainAddedMessageProcessor subscriptionDomainAddedMessageProcessor;
- private SubscriptionDomainRemovedMessageProcessor subscriptionDomainRemovedMessageProcessor;
public void initialize() {
- // Add tenant event processors
+ // Initialize tenant event processors
completeTenantMessageProcessor = new CompleteTenantMessageProcessor();
add(completeTenantMessageProcessor);
@@ -60,12 +58,6 @@ public class TenantMessageProcessorChain extends MessageProcessorChain {
tenantUnSubscribedMessageProcessor = new TenantUnSubscribedMessageProcessor();
add(tenantUnSubscribedMessageProcessor);
- subscriptionDomainAddedMessageProcessor = new SubscriptionDomainAddedMessageProcessor();
- add(subscriptionDomainAddedMessageProcessor);
-
- subscriptionDomainRemovedMessageProcessor = new SubscriptionDomainRemovedMessageProcessor();
- add(subscriptionDomainRemovedMessageProcessor);
-
if (log.isDebugEnabled()) {
log.debug("Tenant message processor chain initialized");
}
@@ -84,10 +76,6 @@ public class TenantMessageProcessorChain extends MessageProcessorChain {
tenantSubscribedMessageProcessor.addEventListener(eventListener);
} else if (eventListener instanceof TenantUnSubscribedEventListener) {
tenantUnSubscribedMessageProcessor.addEventListener(eventListener);
- } else if (eventListener instanceof SubscriptionDomainsAddedEventListener) {
- subscriptionDomainAddedMessageProcessor.addEventListener(eventListener);
- } else if (eventListener instanceof SubscriptionDomainsRemovedEventListener) {
- subscriptionDomainRemovedMessageProcessor.addEventListener(eventListener);
}
else {
throw new RuntimeException("Unknown event listener");
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageDelegator.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageDelegator.java
new file mode 100644
index 0000000..2af000d
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageDelegator.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.receiver.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.Message;
+import org.apache.stratos.messaging.listener.EventListener;
+import org.apache.stratos.messaging.message.processor.MessageProcessorChain;
+import org.apache.stratos.messaging.message.processor.domain.mapping.DomainMappingMessageProcessorChain;
+
+/**
+ * Domain mapping event message delegator.
+ */
+class DomainMappingEventMessageDelegator implements Runnable {
+
+ private static final Log log = LogFactory.getLog(DomainMappingEventMessageDelegator.class);
+
+ private MessageProcessorChain processorChain;
+ private DomainMappingEventMessageQueue messageQueue;
+ private boolean terminated;
+
+ public DomainMappingEventMessageDelegator(DomainMappingEventMessageQueue messageQueue) {
+ this.messageQueue = messageQueue;
+ this.processorChain = new DomainMappingMessageProcessorChain();
+ }
+
+ public void addEventListener(EventListener eventListener) {
+ processorChain.addEventListener(eventListener);
+ }
+
+ @Override
+ public void run() {
+ try {
+ if (log.isInfoEnabled()) {
+ log.info("Domain mapping event message delegator started");
+ }
+
+ while (!terminated) {
+ try {
+ Message message = messageQueue.take();
+ String type = message.getEventClassName();
+
+ // Retrieve the actual message
+ String json = message.getText();
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Domain mapping event message received from queue: [event-class-name] %s " +
+ "[message-queue] %s", type, messageQueue.getClass()));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Delegating domain mapping event message: %s", type));
+ }
+ processorChain.process(type, json, DomainMappingManager.getInstance());
+ } catch (InterruptedException e) {
+ log.info("Domain mapping event message delegator is shutting down...");
+ return;
+ } catch (Exception e) {
+ log.error("Failed to retrieve domain mapping event message", e);
+ }
+ }
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Domain mapping event message delegator failed", e);
+ }
+ }
+ }
+
+ /**
+ * Terminate topology event message delegator thread.
+ */
+ public void terminate() {
+ terminated = true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageListener.java
new file mode 100644
index 0000000..a872296
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageListener.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.receiver.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.broker.subscribe.MessageListener;
+import org.apache.stratos.messaging.domain.Message;
+
+/**
+ * Domain mapping event message listener.
+ */
+class DomainMappingEventMessageListener implements MessageListener {
+
+ private static final Log log = LogFactory.getLog(DomainMappingEventMessageListener.class);
+
+ private final DomainMappingEventMessageQueue messageQueue;
+
+ public DomainMappingEventMessageListener(DomainMappingEventMessageQueue messageQueue) {
+ this.messageQueue = messageQueue;
+ }
+
+ @Override
+ public void messageReceived(Message message) {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Domain mapping message received: %s", message.getText()));
+ }
+ // Add received message to the queue
+ messageQueue.add(message);
+
+ } catch (Exception e) {
+ String error = "An error occurred while receiving domain mapping event message";
+ log.error(error, e);
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageQueue.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageQueue.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageQueue.java
new file mode 100644
index 0000000..fb37429
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventMessageQueue.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.receiver.domain.mapping;
+
+import org.apache.stratos.messaging.domain.Message;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * Domain mapping event message queue.
+ */
+class DomainMappingEventMessageQueue extends LinkedBlockingQueue<Message> {
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventReceiver.java
new file mode 100644
index 0000000..824329f
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingEventReceiver.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.receiver.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.broker.subscribe.TopicSubscriber;
+import org.apache.stratos.messaging.listener.EventListener;
+import org.apache.stratos.messaging.util.Util;
+
+import java.util.concurrent.ExecutorService;
+
+/**
+ * Domain mapping event receiver.
+ */
+public class DomainMappingEventReceiver {
+
+ private static final Log log = LogFactory.getLog(DomainMappingEventReceiver.class);
+
+ private DomainMappingEventMessageDelegator messageDelegator;
+ private DomainMappingEventMessageListener messageListener;
+ private TopicSubscriber topicSubscriber;
+ private ExecutorService executorService;
+
+ public DomainMappingEventReceiver() {
+ DomainMappingEventMessageQueue messageQueue = new DomainMappingEventMessageQueue();
+ this.messageDelegator = new DomainMappingEventMessageDelegator(messageQueue);
+ this.messageListener = new DomainMappingEventMessageListener(messageQueue);
+ }
+
+ public void addEventListener(EventListener eventListener) {
+ messageDelegator.addEventListener(eventListener);
+ }
+
+
+ public void execute() {
+ try {
+ // Start topic subscriber thread
+ topicSubscriber = new TopicSubscriber(Util.Topics.DOMAIN_MAPPING_TOPIC.getTopicName(), messageListener);
+ // subscriber.setMessageListener(messageListener);
+ executorService.execute(topicSubscriber);
+
+
+ if (log.isDebugEnabled()) {
+ log.debug("Domain mapping event message receiver thread started");
+ }
+
+ // Start topology event message delegator thread
+ executorService.execute(messageDelegator);
+ if (log.isDebugEnabled()) {
+ log.debug("Domain mapping event message delegator thread started");
+ }
+
+
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("Domain mapping receiver failed", e);
+ }
+ }
+ }
+
+ public void terminate() {
+ topicSubscriber.terminate();
+ messageDelegator.terminate();
+ }
+
+ public ExecutorService getExecutorService() {
+ return executorService;
+ }
+
+ public void setExecutorService(ExecutorService executorService) {
+ this.executorService = executorService;
+ }
+}
[2/5] stratos git commit: Replacing signup-id with tenant-id and
introducing domain mapping stratos manager service methods and rest api
methods
Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTopologyEventReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTopologyEventReceiver.java
new file mode 100644
index 0000000..2f8b087
--- /dev/null
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTopologyEventReceiver.java
@@ -0,0 +1,421 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.load.balancer.messaging.receiver;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.load.balancer.context.LoadBalancerContext;
+import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
+import org.apache.stratos.load.balancer.context.map.AlgorithmContextMap;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Member;
+import org.apache.stratos.messaging.domain.topology.MemberStatus;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.event.topology.*;
+import org.apache.stratos.messaging.listener.topology.*;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+
+import java.util.concurrent.ExecutorService;
+
+/**
+ * Load balancer topology receiver updates load balancer context according to
+ * incoming topology events.
+ */
+public class LoadBalancerTopologyEventReceiver {
+
+ private static final Log log = LogFactory.getLog(LoadBalancerTopologyEventReceiver.class);
+ private ExecutorService executorService;
+ private TopologyEventReceiver topologyEventReceiver;
+ private boolean terminated;
+
+ public LoadBalancerTopologyEventReceiver() {
+ this.topologyEventReceiver = new TopologyEventReceiver();
+ addEventListeners();
+ }
+
+ public void execute() {
+ topologyEventReceiver.setExecutorService(executorService);
+ topologyEventReceiver.execute();
+ if (log.isInfoEnabled()) {
+ log.info("Load balancer topology receiver thread started");
+ }
+
+
+ }
+
+ private void addEventListeners() {
+ // Listen to topology events that affect clusters
+ topologyEventReceiver.addEventListener(new CompleteTopologyEventListener() {
+ private boolean initialized;
+
+ @Override
+ protected void onEvent(Event event) {
+ if(!initialized) {
+ try {
+ TopologyManager.acquireReadLock();
+ for (Service service : TopologyManager.getTopology().getServices()) {
+ for (Cluster cluster : service.getClusters()) {
+ if (clusterHasActiveMembers(cluster)) {
+ LoadBalancerContextUtil.addClusterAgainstHostNames(cluster);
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Cluster does not have any active members");
+ }
+ }
+ for (Member member : cluster.getMembers()) {
+ if (member.getStatus() == MemberStatus.Activated) {
+ addMemberIpsToMemberIpHostnameMap(cluster, member);
+ }
+
+ }
+ }
+ }
+ initialized = true;
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ TopologyManager.releaseReadLock();
+ }
+ }
+ }
+
+ private boolean clusterHasActiveMembers(Cluster cluster) {
+ for (Member member : cluster.getMembers()) {
+ if (member.getStatus() == MemberStatus.Activated) {
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ topologyEventReceiver.addEventListener(new MemberActivatedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event;
+
+ //TopologyManager.acquireReadLock();
+ TopologyManager.acquireReadLockForCluster(memberActivatedEvent.getServiceName(),
+ memberActivatedEvent.getClusterId());
+
+ try {
+
+ Service service = TopologyManager.getTopology().getService(memberActivatedEvent.getServiceName());
+ if (service == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Service not found in topology: [service] %s",
+ memberActivatedEvent.getServiceName()));
+ }
+ return;
+ }
+ Cluster cluster = service.getCluster(memberActivatedEvent.getClusterId());
+ if (cluster == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Cluster not found in topology: [service] %s [cluster] %s",
+ memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId()));
+ }
+ return;
+ }
+ Member member = cluster.getMember(memberActivatedEvent.getMemberId());
+ if (member == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Member not found in topology: [service] %s [cluster] %s [member] %s",
+ memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId(),
+ memberActivatedEvent.getMemberId()));
+ }
+ return;
+ }
+
+ // Add member to member-ip -> hostname map
+ addMemberIpsToMemberIpHostnameMap(cluster, member);
+
+ if (LoadBalancerContext.getInstance().getClusterIdClusterMap().containsCluster(
+ member.getClusterId())) {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Cluster already exists in load balancer context: [service] %s " +
+ "[cluster] %s", member.getServiceName(), member.getClusterId()));
+ }
+ // At this point member is already added to the cluster object in load balancer context
+ return;
+ }
+
+ // Add cluster to load balancer context when its first member is activated:
+ // Cluster not found in load balancer context, add it
+ LoadBalancerContextUtil.addClusterAgainstHostNames(cluster);
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ //TopologyManager.releaseReadLock();
+ TopologyManager.releaseReadLockForCluster(memberActivatedEvent.getServiceName(),
+ memberActivatedEvent.getClusterId());
+ }
+ }
+ });
+ topologyEventReceiver.addEventListener(new MemberMaintenanceListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ MemberMaintenanceModeEvent memberMaintenanceModeEvent = (MemberMaintenanceModeEvent) event;
+
+ TopologyManager.acquireReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
+ memberMaintenanceModeEvent.getClusterId());
+
+ try {
+ //TopologyManager.acquireReadLock();
+
+ Member member = findMember(memberMaintenanceModeEvent.getServiceName(),
+ memberMaintenanceModeEvent.getClusterId(), memberMaintenanceModeEvent.getMemberId());
+
+ if (member != null) {
+ removeMemberIpsFromMemberIpHostnameMap(member);
+ }
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ //TopologyManager.releaseReadLock();
+ TopologyManager.releaseReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
+ memberMaintenanceModeEvent.getClusterId());
+ }
+ }
+ });
+ topologyEventReceiver.addEventListener(new MemberSuspendedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ MemberSuspendedEvent memberSuspendedEvent = (MemberSuspendedEvent) event;
+ TopologyManager.acquireReadLockForCluster(memberSuspendedEvent.getServiceName(),
+ memberSuspendedEvent.getClusterId());
+
+ try {
+ //TopologyManager.acquireReadLock();
+ Member member = findMember(memberSuspendedEvent.getServiceName(),
+ memberSuspendedEvent.getClusterId(), memberSuspendedEvent.getMemberId());
+
+ if (member != null) {
+ removeMemberIpsFromMemberIpHostnameMap(member);
+ }
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ //TopologyManager.releaseReadLock();
+ TopologyManager.releaseReadLockForCluster(memberSuspendedEvent.getServiceName(),
+ memberSuspendedEvent.getClusterId());
+ }
+ }
+ });
+ topologyEventReceiver.addEventListener(new MemberTerminatedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ //TopologyManager.acquireReadLock();
+ MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event;
+
+ TopologyManager.acquireReadLockForCluster(memberTerminatedEvent.getServiceName(),
+ memberTerminatedEvent.getClusterId());
+
+ try {
+ Member member = findMember(memberTerminatedEvent.getServiceName(),
+ memberTerminatedEvent.getClusterId(), memberTerminatedEvent.getMemberId());
+
+ if (member != null) {
+ removeMemberIpsFromMemberIpHostnameMap(member);
+ }
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ //TopologyManager.releaseReadLock();
+ TopologyManager.releaseReadLockForCluster(memberTerminatedEvent.getServiceName(),
+ memberTerminatedEvent.getClusterId());
+ }
+ }
+ });
+ topologyEventReceiver.addEventListener(new ClusterRemovedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ // Remove cluster from context
+ ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event;
+ TopologyManager.acquireReadLockForCluster(clusterRemovedEvent.getServiceName(),
+ clusterRemovedEvent.getClusterId());
+
+ try {
+ AlgorithmContextMap.getInstance().removeCluster(clusterRemovedEvent.getServiceName(),
+ clusterRemovedEvent.getClusterId());
+ } catch (Exception e) {
+ log.error("Could not remove cluster from load balancer algorithm context map", e);
+ }
+
+ try {
+ Cluster cluster = LoadBalancerContext.getInstance().getClusterIdClusterMap().getCluster(clusterRemovedEvent.getClusterId());
+ if (cluster != null) {
+ for (Member member : cluster.getMembers()) {
+ removeMemberIpsFromMemberIpHostnameMap(member);
+ }
+ LoadBalancerContextUtil.removeClusterAgainstHostNames(cluster.getClusterId());
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Cluster not found in load balancer context: [service] %s [cluster] %s",
+ clusterRemovedEvent.getServiceName(), clusterRemovedEvent.getClusterId()));
+ }
+ }
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ TopologyManager.releaseReadLockForCluster(clusterRemovedEvent.getServiceName(),
+ clusterRemovedEvent.getClusterId());
+ }
+ }
+ });
+ topologyEventReceiver.addEventListener(new ServiceRemovedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ ServiceRemovedEvent serviceRemovedEvent = (ServiceRemovedEvent) event;
+ TopologyManager.acquireReadLockForService(serviceRemovedEvent.getServiceName());
+
+ try {
+ //TopologyManager.acquireReadLock();
+
+ // Remove all clusters of given service from context
+ Service service = TopologyManager.getTopology().getService(serviceRemovedEvent.getServiceName());
+ if (service != null) {
+ for (Cluster cluster : service.getClusters()) {
+ for (Member member : cluster.getMembers()) {
+ removeMemberIpsFromMemberIpHostnameMap(member);
+ }
+ LoadBalancerContextUtil.removeClusterAgainstHostNames(cluster.getClusterId());
+ }
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Service not found in topology: [service] %s",
+ serviceRemovedEvent.getServiceName()));
+ }
+ }
+ } catch (Exception e) {
+ log.error("Error processing event", e);
+ } finally {
+ //TopologyManager.releaseReadLock();
+ TopologyManager.releaseReadLockForService(serviceRemovedEvent.getServiceName());
+ }
+ }
+ });
+ }
+
+ private Member findMember(String serviceName, String clusterId, String memberId) {
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Service not found in topology: [service] %s", serviceName));
+ }
+ return null;
+ }
+
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Cluster not found in topology: [service] %s [cluster] %s", serviceName, clusterId));
+ }
+ return null;
+ }
+
+ Member member = cluster.getMember(memberId);
+ if (member == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Member not found in topology: [service] %s [cluster] %s [member] %s", serviceName,
+ clusterId, memberId));
+ }
+ return null;
+ }
+ return member;
+ }
+
+ private void addMemberIpsToMemberIpHostnameMap(Cluster cluster, Member member) {
+ if ((cluster.getHostNames() == null) || (cluster.getHostNames().size() == 0)) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Hostnames not found in cluster %s, could not add member ips to member-ip " +
+ "-> hostname map", member.getClusterId()));
+ }
+ return;
+ }
+
+ String hostname = cluster.getHostNames().get(0);
+ if (cluster.getHostNames().size() > 1) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Multiple hostnames found in cluster %s, using %s",
+ cluster.getHostNames().toString(), hostname));
+ }
+ }
+
+ if (StringUtils.isNotBlank(member.getDefaultPrivateIP())) {
+ LoadBalancerContext.getInstance().getMemberIpHostnameMap().put(member.getDefaultPrivateIP(), hostname);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Member private ip added to member-ip -> hostname map: [service] %s [cluster] " +
+ "%s [member] %s [private-ip] %s", member.getServiceName(), member.getClusterId(),
+ member.getMemberId(), member.getDefaultPrivateIP()
+ ));
+ }
+ }
+ if (StringUtils.isNotBlank(member.getDefaultPublicIP())) {
+ LoadBalancerContext.getInstance().getMemberIpHostnameMap().put(member.getDefaultPublicIP(), hostname);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Member public ip added to member-ip -> hostname map: [service] %s [cluster] " +
+ "%s [member] %s [public-ip] %s", member.getServiceName(), member.getClusterId(),
+ member.getMemberId(), member.getDefaultPublicIP()
+ ));
+ }
+ }
+ }
+
+ private void removeMemberIpsFromMemberIpHostnameMap(Member member) {
+ if (StringUtils.isNotBlank(member.getDefaultPrivateIP())) {
+ LoadBalancerContext.getInstance().getMemberIpHostnameMap().remove(member.getDefaultPrivateIP());
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Member private ip removed from member-ip -> hostname map: [private-ip] %s",
+ member.getDefaultPrivateIP()));
+ }
+ }
+ if (StringUtils.isNotBlank(member.getDefaultPublicIP())) {
+ LoadBalancerContext.getInstance().getMemberIpHostnameMap().remove(member.getDefaultPublicIP());
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Member public ip removed from member-ip -> hostname map: [public-ip] %s",
+ member.getDefaultPublicIP()));
+ }
+ }
+ }
+
+ /**
+ * Terminate load balancer topology receiver thread.
+ */
+ public void terminate() {
+ topologyEventReceiver.terminate();
+ terminated = true;
+ }
+
+ public ExecutorService getExecutorService() {
+ return executorService;
+ }
+
+ public void setExecutorService(ExecutorService executorService) {
+ this.executorService = executorService;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
new file mode 100644
index 0000000..aceb1c2
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpHandler.java
@@ -0,0 +1,324 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.components;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.manager.domain.ApplicationSignUp;
+import org.apache.stratos.manager.domain.ArtifactRepository;
+import org.apache.stratos.manager.exception.ApplicationSignUpException;
+import org.apache.stratos.manager.registry.RegistryManager;
+import org.apache.stratos.messaging.domain.applications.Application;
+import org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Application signup handler.
+ */
+public class ApplicationSignUpHandler {
+
+ private static final Log log = LogFactory.getLog(ApplicationSignUpHandler.class);
+
+ private static final String APPLICATION_SIGNUP_RESOURCE_PATH = "/stratos.manager/application.signups/";
+
+ private String prepareApplicationSignupResourcePath(String applicationId, int tenantId) {
+ return APPLICATION_SIGNUP_RESOURCE_PATH + applicationId + "-tenant-" + tenantId;
+ }
+
+ /**
+ * Add application signup.
+ *
+ * @param applicationSignUp
+ * @throws ApplicationSignUpException
+ */
+ public void addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException {
+ try {
+ if (applicationSignUp == null) {
+ throw new RuntimeException("Application signup is null");
+ }
+
+ String applicationId = applicationSignUp.getApplicationId();
+ int tenantId = applicationSignUp.getTenantId();
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Adding application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+
+ // Encrypt artifact repository passwords
+ Application application = ApplicationManager.getApplications().getApplication(applicationId);
+ if (application == null) {
+ throw new RuntimeException(String.format("Application not found: [application-id] %s", applicationId));
+ }
+
+ if (applicationSignUpExist(applicationId, tenantId)) {
+ throw new RuntimeException(String.format("Tenant has already signed up for application: " +
+ "[application-id] %s [tenant-id] %d", applicationId, tenantId));
+ }
+
+ encryptRepositoryPasswords(applicationSignUp, application.getKey());
+
+ // Persist application signup
+ String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
+ RegistryManager.getInstance().persist(resourcePath, applicationSignUp);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Application signup added successfully: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+ } catch (Exception e) {
+ String message = "Could not add application signup";
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Check application signup availability.
+ * @param applicationId
+ * @param tenantId
+ * @return
+ * @throws ApplicationSignUpException
+ */
+ public boolean applicationSignUpExist(String applicationId, int tenantId) throws ApplicationSignUpException {
+ try {
+ String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
+ ApplicationSignUp applicationSignUp = (ApplicationSignUp) RegistryManager.getInstance().read(resourcePath);
+ return (applicationSignUp != null);
+ } catch (Exception e) {
+ String message = "Could not check application signup availability";
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Encrypt artifact repository passwords.
+ * @param applicationSignUp
+ * @param applicationKey
+ */
+ private void encryptRepositoryPasswords(ApplicationSignUp applicationSignUp, String applicationKey) {
+ if (applicationSignUp.getArtifactRepositories() != null) {
+ for (ArtifactRepository artifactRepository : applicationSignUp.getArtifactRepositories()) {
+ String repoPassword = artifactRepository.getRepoPassword();
+ if ((artifactRepository != null) && (StringUtils.isNotBlank(repoPassword))) {
+ String encryptedRepoPassword = CommonUtil.encryptPassword(repoPassword,
+ applicationKey);
+ artifactRepository.setRepoPassword(encryptedRepoPassword);
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Artifact repository password encrypted: [application-id] %s " +
+ "[tenant-id] %d [repo-url] %s", applicationSignUp.getApplicationId(),
+ applicationSignUp.getTenantId(), artifactRepository.getRepoUrl()));
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Remove application signup by application id, tenant id.
+ *
+ * @param applicationId
+ * @param tenantId
+ * @throws ApplicationSignUpException
+ */
+ public void removeApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException {
+ try {
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Removing application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+
+ if (!applicationSignUpExist(applicationId, tenantId)) {
+ throw new RuntimeException(String.format("Application signup not found: [application-id] %s " +
+ "[tenant-id] %d", applicationId, tenantId));
+ }
+
+ String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
+ RegistryManager.getInstance().remove(resourcePath);
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Application signup removed successfully: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+ } catch (Exception e) {
+ String message = "Could not remove application signup";
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Get application signup by application id, tenant id.
+ *
+ * @param applicationId
+ * @param tenantId
+ * @return
+ * @throws ApplicationSignUpException
+ */
+ public ApplicationSignUp getApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Get application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+
+ String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
+ ApplicationSignUp applicationSignUp = (ApplicationSignUp) RegistryManager.getInstance().read(resourcePath);
+ return applicationSignUp;
+ } catch (Exception e) {
+ String message = String.format("Could not get application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId);
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Get application singups available of an application by application id.
+ *
+ * @param applicationId
+ * @return
+ * @throws ApplicationSignUpException
+ */
+ public ApplicationSignUp[] getApplicationSignUps(String applicationId) throws ApplicationSignUpException {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Get application signups: [application-id] %s", applicationId));
+ }
+
+ if (StringUtils.isBlank(applicationId)) {
+ throw new RuntimeException("Application id is null");
+ }
+ List<ApplicationSignUp> applicationSignUps = new ArrayList<ApplicationSignUp>();
+
+ String[] resourcePaths = (String[]) RegistryManager.getInstance().read(APPLICATION_SIGNUP_RESOURCE_PATH);
+ if (resourcePaths != null) {
+ for (String resourcePath : resourcePaths) {
+ if (resourcePath != null) {
+ ApplicationSignUp applicationSignUp = (ApplicationSignUp)
+ RegistryManager.getInstance().read(resourcePath);
+ if (applicationId.equals(applicationSignUp.getApplicationId())) {
+ applicationSignUps.add(applicationSignUp);
+ }
+ }
+ }
+ }
+
+ return applicationSignUps.toArray(new ApplicationSignUp[applicationSignUps.size()]);
+ } catch (Exception e) {
+ String message = "Could not get application signups: [application-id] " + applicationId;
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Get all application signups.
+ * @return
+ * @throws ApplicationSignUpException
+ */
+ List<ApplicationSignUp> getApplicationSignUps() throws ApplicationSignUpException {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Reading application signups"));
+ }
+
+ List<ApplicationSignUp> applicationSignUps = new ArrayList<ApplicationSignUp>();
+
+ String[] resourcePaths = (String[]) RegistryManager.getInstance().read(APPLICATION_SIGNUP_RESOURCE_PATH);
+ if (resourcePaths != null) {
+ for (String resourcePath : resourcePaths) {
+ if (resourcePath != null) {
+ ApplicationSignUp applicationSignUp = (ApplicationSignUp)
+ RegistryManager.getInstance().read(resourcePath);
+ applicationSignUps.add(applicationSignUp);
+ }
+ }
+ }
+
+ return applicationSignUps;
+ } catch (Exception e) {
+ String message = "Could not get application signups";
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ /**
+ * Get application signups for artifact repository
+ *
+ * @param repoUrl
+ * @return
+ * @throws ApplicationSignUpException
+ */
+ public List<ApplicationSignUp> getApplicationSignUpsForRepository(String repoUrl) throws ApplicationSignUpException {
+ try {
+ List<ApplicationSignUp> filteredResult = new ArrayList<ApplicationSignUp>();
+
+ List<ApplicationSignUp> applicationSignUps = getApplicationSignUps();
+ for (ApplicationSignUp applicationSignUp : applicationSignUps) {
+ if (applicationSignUp.getArtifactRepositories() != null) {
+ for (ArtifactRepository artifactRepository : applicationSignUp.getArtifactRepositories()) {
+ if (artifactRepository != null) {
+ if (artifactRepository.getRepoUrl().equals(repoUrl)) {
+ filteredResult.add(applicationSignUp);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return filteredResult;
+ } catch (Exception e) {
+ String message = "Could not get artifact repositories for repository: [repo-url] " + repoUrl;
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+
+ public void updateApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException {
+
+ String applicationId = applicationSignUp.getApplicationId();
+ int tenantId = applicationSignUp.getTenantId();
+
+ try {
+ // Persist application signup
+ String resourcePath = prepareApplicationSignupResourcePath(applicationId, tenantId);
+ RegistryManager.getInstance().persist(resourcePath, applicationSignUp);
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Application signup updated successfully: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId));
+ }
+ } catch (Exception e) {
+ String message = String.format("Could not get application signup: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId);
+ log.error(message, e);
+ throw new ApplicationSignUpException(message, e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpManager.java
deleted file mode 100644
index 2924682..0000000
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ApplicationSignUpManager.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.manager.components;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.common.util.CommonUtil;
-import org.apache.stratos.manager.domain.ArtifactRepository;
-import org.apache.stratos.manager.registry.RegistryManager;
-import org.apache.stratos.manager.domain.ApplicationSignUp;
-import org.apache.stratos.manager.exception.ApplicationSignUpException;
-import org.apache.stratos.messaging.domain.applications.Application;
-import org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * Application signup manager.
- */
-public class ApplicationSignUpManager {
-
- private static final Log log = LogFactory.getLog(ApplicationSignUpManager.class);
-
- private static final String APPLICATION_SIGNUP_RESOURCE_PATH = "/stratos.manager/application.signups/";
-
- /**
- * Add application signup.
- * @param applicationSignUp
- * @throws ApplicationSignUpException
- */
- public String addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException {
- try {
- if(applicationSignUp == null) {
- throw new RuntimeException("Application signup is null");
- }
-
- if(log.isInfoEnabled()) {
- log.info(String.format("Adding application signup: [application-id] %s",
- applicationSignUp.getApplicationId()));
- }
-
- // Generate application signup id
- String signUpId = UUID.randomUUID().toString();
- applicationSignUp.setSignUpId(signUpId);
-
- // Encrypt artifact repository passwords
- String applicationId = applicationSignUp.getApplicationId();
- Application application = ApplicationManager.getApplications().getApplication(applicationId);
- if(application == null) {
- throw new RuntimeException(String.format("Application not found: [application-id] %s", applicationId));
- }
- encryptRepositoryPasswords(applicationSignUp, application.getKey());
-
- // Persist application signup
- String resourcePath = APPLICATION_SIGNUP_RESOURCE_PATH + applicationSignUp.getSignUpId();
- RegistryManager.getInstance().persist(resourcePath, applicationSignUp);
-
- if(log.isInfoEnabled()) {
- log.info(String.format("Application signup added successfully: [application-id] %s [signup-id] %s",
- applicationSignUp.getApplicationId(), applicationSignUp.getSignUpId()));
- }
- return signUpId;
- } catch (Exception e) {
- String message = "Could not add application signup";
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-
- private void encryptRepositoryPasswords(ApplicationSignUp applicationSignUp, String applicationKey) {
- if(applicationSignUp.getArtifactRepositories() != null) {
- for(ArtifactRepository artifactRepository : applicationSignUp.getArtifactRepositories()) {
- String repoPassword = artifactRepository.getRepoPassword();
- if((artifactRepository != null) && (StringUtils.isNotBlank(repoPassword))) {
- String encryptedRepoPassword = CommonUtil.encryptPassword(repoPassword,
- applicationKey);
- artifactRepository.setRepoPassword(encryptedRepoPassword);
-
- if(log.isDebugEnabled()) {
- log.debug(String.format("Artifact repository password encrypted: [application-id] %s " +
- "[signup-id] %s [repo-url] %s", applicationSignUp.getApplicationId(),
- applicationSignUp.getSignUpId(), artifactRepository.getRepoUrl()));
- }
- }
- }
- }
- }
-
- /**
- * Remove application signup by signup id.
- * @param signUpId
- * @throws ApplicationSignUpException
- */
- public void removeApplicationSignUp(String signUpId) throws ApplicationSignUpException {
- try {
- if(log.isInfoEnabled()) {
- log.info(String.format("Removing application signup: [signup-id] %s", signUpId));
- }
-
- String resourcePath = APPLICATION_SIGNUP_RESOURCE_PATH + signUpId;
- ApplicationSignUp applicationSignUp = (ApplicationSignUp) RegistryManager.getInstance().read(resourcePath);
- if(applicationSignUp == null) {
- throw new RuntimeException(String.format("Application signup not found: [signup-id] %s", signUpId));
- }
-
- RegistryManager.getInstance().remove(resourcePath);
-
- if(log.isInfoEnabled()) {
- log.info(String.format("Application signup removed successfully: [application-id] %s [signup-id] %s",
- applicationSignUp.getApplicationId(), applicationSignUp.getSignUpId()));
- }
- } catch (Exception e) {
- String message = "Could not add application signup";
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-
- /**
- * Get application signup by signup id.
- * @param signUpId
- * @return
- * @throws ApplicationSignUpException
- */
- public ApplicationSignUp getApplicationSignUp(String signUpId) throws ApplicationSignUpException {
- try {
- if(log.isDebugEnabled()) {
- log.debug(String.format("Reading application signup: [signup-id] %s", signUpId));
- }
-
- String resourcePath = APPLICATION_SIGNUP_RESOURCE_PATH + signUpId;
- ApplicationSignUp applicationSignUp = (ApplicationSignUp) RegistryManager.getInstance().read(resourcePath);
- return applicationSignUp;
- } catch (Exception e) {
- String message = "Could not get application signup";
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-
- /**
- * Get application singups of an application by application id.
- * @param applicationId
- * @return
- * @throws ApplicationSignUpException
- */
- public List<ApplicationSignUp> getApplicationSignUps(String applicationId) throws ApplicationSignUpException {
- try {
- if(log.isDebugEnabled()) {
- log.debug(String.format("Reading application signups: [application-id] %s", applicationId));
- }
-
- if(StringUtils.isBlank(applicationId)) {
- throw new RuntimeException("Application id is null");
- }
- List<ApplicationSignUp> applicationSignUps = new ArrayList<ApplicationSignUp>();
-
- String[] resourcePaths = (String[]) RegistryManager.getInstance().read(APPLICATION_SIGNUP_RESOURCE_PATH);
- if(resourcePaths != null) {
- for (String resourcePath : resourcePaths) {
- if(resourcePath != null) {
- ApplicationSignUp applicationSignUp = (ApplicationSignUp)
- RegistryManager.getInstance().read(resourcePath);
- if (applicationId.equals(applicationSignUp.getApplicationId())) {
- applicationSignUps.add(applicationSignUp);
- }
- }
- }
- }
-
- return applicationSignUps;
- } catch (Exception e) {
- String message = "Could not get application signups";
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-
- private List<ApplicationSignUp> getApplicationSignUps() throws ApplicationSignUpException {
- try {
- if(log.isDebugEnabled()) {
- log.debug(String.format("Reading application signups"));
- }
-
- List<ApplicationSignUp> applicationSignUps = new ArrayList<ApplicationSignUp>();
-
- String[] resourcePaths = (String[]) RegistryManager.getInstance().read(APPLICATION_SIGNUP_RESOURCE_PATH);
- if(resourcePaths != null) {
- for (String resourcePath : resourcePaths) {
- if(resourcePath != null) {
- ApplicationSignUp applicationSignUp = (ApplicationSignUp)
- RegistryManager.getInstance().read(resourcePath);
- applicationSignUps.add(applicationSignUp);
- }
- }
- }
-
- return applicationSignUps;
- } catch (Exception e) {
- String message = "Could not get application signups";
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-
- /**
- * Get application signups for artifact repository
- * @param repoUrl
- * @return
- * @throws ApplicationSignUpException
- */
- public List<ApplicationSignUp> getApplicationSignUpsForRepository(String repoUrl) throws ApplicationSignUpException {
- try {
- List<ApplicationSignUp> filteredResult = new ArrayList<ApplicationSignUp>();
-
- List<ApplicationSignUp> applicationSignUps = getApplicationSignUps();
- for(ApplicationSignUp applicationSignUp : applicationSignUps) {
- if(applicationSignUp.getArtifactRepositories() != null) {
- for(ArtifactRepository artifactRepository : applicationSignUp.getArtifactRepositories()) {
- if(artifactRepository != null) {
- if(artifactRepository.getRepoUrl().equals(repoUrl)) {
- filteredResult.add(applicationSignUp);
- break;
- }
- }
- }
- }
- }
-
- return filteredResult;
- } catch (Exception e) {
- String message = "Could not get artifact repositories for repository: [repo-url] " + repoUrl;
- log.error(message, e);
- throw new ApplicationSignUpException(message, e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ArtifactDistributionCoordinator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ArtifactDistributionCoordinator.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ArtifactDistributionCoordinator.java
index cc97824..a9b4ba7 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ArtifactDistributionCoordinator.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/ArtifactDistributionCoordinator.java
@@ -40,42 +40,46 @@ public class ArtifactDistributionCoordinator {
private static final Log log = LogFactory.getLog(ArtifactDistributionCoordinator.class);
- private ApplicationSignUpManager applicationSignUpManager;
+ private ApplicationSignUpHandler applicationSignUpManager;
private InstanceNotificationPublisher publisher;
public ArtifactDistributionCoordinator() {
- applicationSignUpManager = new ApplicationSignUpManager();
+ applicationSignUpManager = new ApplicationSignUpHandler();
publisher = new InstanceNotificationPublisher();
}
/**
* Notify artifact updated event for an application signup.
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
* @throws ArtifactDistributionCoordinatorException
*/
- public void notifyArtifactUpdatedEventForSignUp(String signUpId) throws ArtifactDistributionCoordinatorException {
- notifyArtifactUpdatedEventForSignUp(signUpId, null);
+ public void notifyArtifactUpdatedEventForSignUp(String applicationId, int tenantId) throws ArtifactDistributionCoordinatorException {
+ notifyArtifactUpdatedEventForSignUp(applicationId, tenantId, null);
}
/**
* Notify artifact updated event for an application signup, cluster.
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
* @param clusterId
* @throws ArtifactDistributionCoordinatorException
*/
- public void notifyArtifactUpdatedEventForSignUp(String signUpId, String clusterId) throws ArtifactDistributionCoordinatorException {
+ public void notifyArtifactUpdatedEventForSignUp(String applicationId, int tenantId, String clusterId)
+ throws ArtifactDistributionCoordinatorException {
+
try {
- ApplicationSignUp applicationSignUp = applicationSignUpManager.getApplicationSignUp(signUpId);
+ ApplicationSignUp applicationSignUp = applicationSignUpManager.getApplicationSignUp(applicationId, tenantId);
if (applicationSignUp == null) {
- throw new RuntimeException(String.format("Application signup not found: [signup-id] %s", signUpId));
+ throw new RuntimeException(String.format("Application signup not found: [application-id] %s " +
+ "[tenant-id] %d", applicationId, tenantId));
}
- String applicationId = applicationSignUp.getApplicationId();
if (!artifactRepositoriesExist(applicationSignUp)) {
log.warn(String.format("Artifact repositories not found for application signup, " +
- "artifact updated event not sent: [application-id] %s [signup-id] %s ",
- applicationId, applicationSignUp.getSignUpId()));
+ "artifact updated event not sent: [application-id] %s [tenant-id] %s ",
+ applicationId, tenantId));
} else {
for (ArtifactRepository artifactRepository : applicationSignUp.getArtifactRepositories()) {
if (artifactRepository != null) {
@@ -90,9 +94,9 @@ public class ArtifactDistributionCoordinator {
if (log.isInfoEnabled()) {
log.info(String.format("Artifact updated event published: [application-id] %s " +
- "[signup-id] %s [cartridge-type] %s [alias] %s [repo-url] %s",
+ "[tenant-id] %d [cartridge-type] %s [alias] %s [repo-url] %s",
applicationId,
- applicationSignUp.getSignUpId(),
+ tenantId,
artifactRepository.getCartridgeType(),
artifactRepository.getAlias(),
artifactRepository.getRepoUrl()));
@@ -128,6 +132,7 @@ public class ArtifactDistributionCoordinator {
if((artifactRepository != null) && (artifactRepository.getRepoUrl().equals(repoUrl))) {
String applicationId = applicationSignUp.getApplicationId();
+ int tenantId = applicationSignUp.getTenantId();
String clusterId = findClusterId(applicationId, artifactRepository.getAlias());
publisher.publishArtifactUpdatedEvent(clusterId,
@@ -138,9 +143,9 @@ public class ArtifactDistributionCoordinator {
if (log.isInfoEnabled()) {
log.info(String.format("Artifact updated event published: [application-id] %s " +
- "[signup-id] %s [cartridge-type] %s [alias] %s [repo-url] %s",
+ "[tenant-id] %d [cartridge-type] %s [alias] %s [repo-url] %s",
applicationId,
- applicationSignUp.getSignUpId(),
+ tenantId,
artifactRepository.getCartridgeType(),
artifactRepository.getAlias(),
artifactRepository.getRepoUrl()));
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
new file mode 100644
index 0000000..83fd4b0
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/components/DomainMappingHandler.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.components;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.domain.ApplicationSignUp;
+import org.apache.stratos.manager.exception.DomainMappingException;
+import org.apache.stratos.manager.messaging.publisher.DomainMappingEventPublisher;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Domain mapping handler.
+ */
+public class DomainMappingHandler {
+
+ private static final Log log = LogFactory.getLog(DomainMappingHandler.class);
+
+ private ApplicationSignUpHandler applicationSignUpHandler;
+
+ public DomainMappingHandler() {
+ applicationSignUpHandler = new ApplicationSignUpHandler();
+ }
+
+ public void addDomainMapping(DomainMapping domainMapping) throws DomainMappingException {
+ try {
+ String applicationId = domainMapping.getApplicationId();
+ int tenantId = domainMapping.getTenantId();
+ String domainName = domainMapping.getDomainName();
+
+ // Check domain name availability
+ checkDomainNameAvailability(domainName);
+
+ // Add domain name to application signup
+ ApplicationSignUp applicationSignUp = applicationSignUpHandler.getApplicationSignUp(applicationId, tenantId);
+ DomainMapping[] domainMappingArray = applicationSignUp.getDomainMappings();
+ if(domainMappingArray == null) {
+ domainMappingArray = new DomainMapping[1];
+ domainMappingArray[0] = domainMapping;
+ } else {
+ List<DomainMapping> domainMappingList = convertDomainMappingArrayToList(domainMappingArray);
+ domainMappingList.add(domainMapping);
+ domainMappingArray = domainMappingList.toArray(new DomainMapping[domainMappingList.size()]);
+ }
+
+ applicationSignUp.setDomainMappings(domainMappingArray);
+ applicationSignUpHandler.updateApplicationSignUp(applicationSignUp);
+
+ DomainMappingEventPublisher.publishDomainMappingAddedEvent(applicationId, tenantId,
+ domainMapping.getServiceName(), domainMapping.getClusterId(),
+ domainMapping.getDomainName(), domainMapping.getContextPath());
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping added successfully: [application-id] %s [tenant-id] %d " +
+ "[domain-name] %s", applicationId, tenantId, domainName));
+ }
+ } catch (Exception e) {
+ String message = "Could not add domain mapping";
+ log.error(message, e);
+ throw new DomainMappingException(message, e);
+ }
+ }
+
+ private List<DomainMapping> convertDomainMappingArrayToList(DomainMapping[] domainMappingArray) {
+ List<DomainMapping> domainMappingList = new ArrayList<DomainMapping>();
+ for(DomainMapping arrayItem : domainMappingArray) {
+ if(arrayItem != null) {
+ domainMappingList.add(arrayItem);
+ }
+ }
+ return domainMappingList;
+ }
+
+ private void checkDomainNameAvailability(String domainName) throws DomainMappingException {
+ if(domainNameExist(domainName)) {
+ throw new RuntimeException(String.format("Domain name is already mapped: [domain-name] %s", domainName));
+ }
+ }
+
+ public boolean domainNameExist(String domainName) throws DomainMappingException {
+ try {
+ List<ApplicationSignUp> applicationSignUps = applicationSignUpHandler.getApplicationSignUps();
+ if(applicationSignUps != null) {
+ for(ApplicationSignUp applicationSignUp : applicationSignUps) {
+ if(applicationSignUp.getDomainMappings() != null) {
+ for(DomainMapping domainMapping : applicationSignUp.getDomainMappings()) {
+ if((domainMapping != null) && (domainMapping.getDomainName().equals(domainName))) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ String message = String.format("Could not check domain name existence: [domain-name] %s", domainName);
+ log.error(message, e);
+ throw new DomainMappingException(message, e);
+ }
+ return false;
+ }
+
+ public DomainMapping[] getDomainMappings(String applicationId, int tenantId) throws DomainMappingException {
+ try {
+ ApplicationSignUp applicationSignUp = applicationSignUpHandler.getApplicationSignUp(applicationId, tenantId);
+ return applicationSignUp.getDomainMappings();
+ } catch (Exception e) {
+ String message = String.format("Could not get domain mappings: [application-id] %s [tenant-id] %d",
+ applicationId, tenantId);
+ log.error(message, e);
+ throw new DomainMappingException(message, e);
+ }
+ }
+
+ public void removeDomainMapping(String applicationId, int tenantId, String domainName) throws DomainMappingException {
+ try {
+ // Add domain name to application signup
+ ApplicationSignUp applicationSignUp = applicationSignUpHandler.getApplicationSignUp(applicationId, tenantId);
+ DomainMapping[] domainMappingArray = applicationSignUp.getDomainMappings();
+ List<DomainMapping> domainMappingList = convertDomainMappingArrayToList(domainMappingArray);
+
+ Iterator<DomainMapping> iterator = domainMappingList.iterator();
+ while(iterator.hasNext()) {
+ DomainMapping domainMapping = iterator.next();
+ if(domainMapping.getDomainName().equals(domainName)) {
+ iterator.remove();
+
+ domainMappingArray = domainMappingList.toArray(new DomainMapping[domainMappingList.size()]);
+ applicationSignUp.setDomainMappings(domainMappingArray);
+ applicationSignUpHandler.updateApplicationSignUp(applicationSignUp);
+
+ DomainMappingEventPublisher.publishDomainNameRemovedEvent(applicationId, tenantId,
+ domainMapping.getServiceName(), domainMapping.getClusterId(), domainName);
+
+ if(log.isInfoEnabled()) {
+ String.format("Domain mapping removed: [application-id] %s [tenant-id] %d " +
+ "[domain-name] %s", applicationId, tenantId, domainName);
+ }
+ return;
+ }
+ }
+ } catch (Exception e) {
+ String message = String.format("Could not remove domain mappings: [application-id] %s [tenant-id] %d " +
+ "[domain-name] %s", applicationId, tenantId, domainName);
+ log.error(message, e);
+ throw new DomainMappingException(message, e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/domain/ApplicationSignUp.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/domain/ApplicationSignUp.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/domain/ApplicationSignUp.java
index 1e1aa62..dbb836e 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/domain/ApplicationSignUp.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/domain/ApplicationSignUp.java
@@ -19,6 +19,8 @@
package org.apache.stratos.manager.domain;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+
import java.io.Serializable;
/**
@@ -28,18 +30,10 @@ public class ApplicationSignUp implements Serializable {
private static final long serialVersionUID = -3055522170914869018L;
- private String signUpId;
private int tenantId;
private String applicationId;
private ArtifactRepository[] artifactRepositories;
-
- public String getSignUpId() {
- return signUpId;
- }
-
- public void setSignUpId(String signUpId) {
- this.signUpId = signUpId;
- }
+ private DomainMapping[] domainMappings;
public int getTenantId() {
return tenantId;
@@ -64,4 +58,12 @@ public class ApplicationSignUp implements Serializable {
public void setArtifactRepositories(ArtifactRepository[] artifactRepositories) {
this.artifactRepositories = artifactRepositories;
}
+
+ public DomainMapping[] getDomainMappings() {
+ return domainMappings;
+ }
+
+ public void setDomainMappings(DomainMapping[] domainMappings) {
+ this.domainMappings = domainMappings;
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingException.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingException.java
new file mode 100644
index 0000000..35da2fd
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingException.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.exception;
+
+/**
+ * Domain mapping exception.
+ */
+public class DomainMappingException extends Exception {
+
+ public DomainMappingException(String message, Throwable throwable) {
+ super(message, throwable);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingExistsException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingExistsException.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingExistsException.java
deleted file mode 100644
index 544f6b7..0000000
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/exception/DomainMappingExistsException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.manager.exception;
-
-public class DomainMappingExistsException extends Exception {
-
- private static final long serialVersionUID = 1L;
-
- private final String message;
-
- private final String domain;
-
- public DomainMappingExistsException(String message, String domain, Throwable cause) {
- super(message, cause);
- this.message = message;
- this.domain = domain;
- }
-
- public DomainMappingExistsException(String message, String domain) {
- super(message);
- this.message = message;
- this.domain = domain;
- }
-
- public String getMessage() {
- return message;
- }
-
- public String getDomain() {
- return domain;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/TenantSynzhronizerTask.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/TenantSynzhronizerTask.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/TenantSynzhronizerTask.java
index 2b354c4..2195d8c 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/TenantSynzhronizerTask.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/TenantSynzhronizerTask.java
@@ -70,39 +70,11 @@ public class TenantSynzhronizerTask implements Task {
TenantInfoBean tenantBean = new TenantInfoBean();
tenantBean.setTenantId(carbonTenant.getId());
tenantBean.setTenantDomain(carbonTenant.getDomain());
- //TenantMgtUtil.triggerAddTenant(tenantBean);
- // add tenant to Tenant Manager
+
+ // Add tenant to Tenant Manager
org.apache.stratos.messaging.message.receiver.tenant.TenantManager.getInstance()
.addTenant(tenant);
}
-
- // Add subscriptions
- // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // List<CartridgeSubscriptionInfo> cartridgeSubscriptions =
- // PersistenceManager.getSubscriptionsForTenant(tenant.getTenantId());
- // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Collection<CartridgeSubscription> cartridgeSubscriptions =
-// new DataInsertionAndRetrievalManager().getCartridgeSubscriptions(tenant.getTenantId());
-// if (cartridgeSubscriptions != null && !cartridgeSubscriptions.isEmpty()) {
-// for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
-// if (log.isDebugEnabled()) {
-// log.debug(String.format("Tenant subscription found: [tenant-id] %d [tenant-domain] %s [service] %s",
-// carbonTenant.getId(), carbonTenant.getDomain(),
-// cartridgeSubscription.getType()));
-// }
-// HashSet<String> clusterIds = new HashSet<String>();
-// clusterIds.add(cartridgeSubscription.getCluster().getClusterDomain());
-// Subscription subscription =
-// new Subscription(
-// cartridgeSubscription.getType(),
-// clusterIds);
-// for (SubscriptionDomain subscriptionDomain : cartridgeSubscription.getSubscriptionDomains()) {
-// subscription.addSubscriptionDomain(subscriptionDomain.getDomainName(),
-// subscriptionDomain.getApplicationContext());
-// }
-// tenant.addSubscription(subscription);
-// }
-// }
tenants.add(tenant);
}
CompleteTenantEvent event = new CompleteTenantEvent(tenants);
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/DomainMappingEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/DomainMappingEventPublisher.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/DomainMappingEventPublisher.java
new file mode 100644
index 0000000..eb9a9d6
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/DomainMappingEventPublisher.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.messaging.publisher;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.broker.publish.EventPublisher;
+import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
+import org.apache.stratos.messaging.util.Util;
+
+/**
+ * Domain mapping event publisher.
+ */
+public class DomainMappingEventPublisher {
+
+ private static final Log log = LogFactory.getLog(DomainMappingEventPublisher.class);
+
+ public static void publishDomainMappingAddedEvent(String applicationId, int tenantId, String serviceName,
+ String clusterId, String domainName, String contextPath) {
+ DomainMappingAddedEvent domainMappingAddedEvent = new DomainMappingAddedEvent(applicationId, tenantId,
+ serviceName, clusterId, domainName, contextPath);
+
+ EventPublisher eventPublisher = EventPublisherPool.getPublisher(Util.Topics.DOMAIN_MAPPING_TOPIC.getTopicName());
+ eventPublisher.publish(domainMappingAddedEvent);
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping added event published: %s", domainMappingAddedEvent.toString()));
+ }
+ }
+
+ public static void publishDomainNameRemovedEvent(String applicationId, int tenantId, String serviceName,
+ String clusterId, String domainName) {
+ DomainMappingRemovedEvent domainNameRemovedEvent = new DomainMappingRemovedEvent(applicationId, tenantId,
+ serviceName, clusterId, domainName);
+
+ EventPublisher eventPublisher = EventPublisherPool.getPublisher(Util.Topics.DOMAIN_MAPPING_TOPIC.getTopicName());
+ eventPublisher.publish(domainNameRemovedEvent);
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping removed event published: %s", domainNameRemovedEvent.toString()));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/InstanceNotificationPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/InstanceNotificationPublisher.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/InstanceNotificationPublisher.java
index c82e644..e9eb78a 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/InstanceNotificationPublisher.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/publisher/InstanceNotificationPublisher.java
@@ -33,6 +33,7 @@ import org.apache.stratos.messaging.util.Util;
* instances.
*/
public class InstanceNotificationPublisher {
+
private static final Log log = LogFactory.getLog(InstanceNotificationPublisher.class);
public InstanceNotificationPublisher() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/receiver/StratosManagerInstanceStatusEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/receiver/StratosManagerInstanceStatusEventReceiver.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/receiver/StratosManagerInstanceStatusEventReceiver.java
index decb544..365661d 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/receiver/StratosManagerInstanceStatusEventReceiver.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/messaging/receiver/StratosManagerInstanceStatusEventReceiver.java
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.autoscaler.stub.pojo.*;
-import org.apache.stratos.manager.components.ApplicationSignUpManager;
+import org.apache.stratos.manager.components.ApplicationSignUpHandler;
import org.apache.stratos.manager.components.ArtifactDistributionCoordinator;
import org.apache.stratos.manager.domain.ApplicationSignUp;
import org.apache.stratos.messaging.event.Event;
@@ -41,12 +41,12 @@ public class StratosManagerInstanceStatusEventReceiver extends InstanceStatusEve
private static final Log log = LogFactory.getLog(StratosManagerInstanceStatusEventReceiver.class);
- private ApplicationSignUpManager signUpManager;
+ private ApplicationSignUpHandler signUpManager;
private ArtifactDistributionCoordinator artifactDistributionCoordinator;
public StratosManagerInstanceStatusEventReceiver() {
- signUpManager = new ApplicationSignUpManager();
+ signUpManager = new ApplicationSignUpHandler();
artifactDistributionCoordinator = new ArtifactDistributionCoordinator();
addEventListeners();
@@ -89,8 +89,9 @@ public class StratosManagerInstanceStatusEventReceiver extends InstanceStatusEve
throw new RuntimeException("Cluster id not found in instance started event: " + instanceStartedEvent);
}
- List<ApplicationSignUp> applicationSignUps = signUpManager.getApplicationSignUps(applicationId);
- if ((applicationSignUps == null) || (applicationSignUps.size() == 0)) {
+ ApplicationSignUp[] applicationSignUps = signUpManager.getApplicationSignUps(applicationId);
+ if ((applicationSignUps == null) || (applicationSignUps.length == 0) || (
+ (applicationSignUps.length == 1) && (applicationSignUps[0] == null))) {
log.warn(String.format("Application signups not found for application, artifact updated event" +
"not sent: [application-id] %s [cartridge-type] %s", applicationId, serviceName));
return;
@@ -98,7 +99,7 @@ public class StratosManagerInstanceStatusEventReceiver extends InstanceStatusEve
for (ApplicationSignUp applicationSignUp : applicationSignUps) {
artifactDistributionCoordinator.notifyArtifactUpdatedEventForSignUp(
- applicationSignUp.getSignUpId(), clusterId);
+ applicationSignUp.getApplicationId(), applicationSignUp.getTenantId(), clusterId);
}
} catch (Exception e) {
String message = "Could not send artifact updated event";
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/StratosManagerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/StratosManagerService.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/StratosManagerService.java
index d937785..d9e92ea 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/StratosManagerService.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/services/StratosManagerService.java
@@ -22,6 +22,8 @@ package org.apache.stratos.manager.services;
import org.apache.stratos.manager.domain.ApplicationSignUp;
import org.apache.stratos.manager.exception.ApplicationSignUpException;
import org.apache.stratos.manager.exception.ArtifactDistributionCoordinatorException;
+import org.apache.stratos.manager.exception.DomainMappingException;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
import java.util.List;
@@ -33,36 +35,39 @@ public interface StratosManagerService {
/**
* Add application signup
* @param applicationSignUp
- * @return signup id
* @throws ApplicationSignUpException
*/
- public String addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException;
+ public void addApplicationSignUp(ApplicationSignUp applicationSignUp) throws ApplicationSignUpException;
/**
* Remove application signup.
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
*/
- public void removeApplicationSignUp(String signUpId) throws ApplicationSignUpException;
+ public void removeApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException;
/**
* Get application signup.
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
* @return
*/
- public ApplicationSignUp getApplicationSignUp(String signUpId) throws ApplicationSignUpException;
+ public ApplicationSignUp getApplicationSignUp(String applicationId, int tenantId) throws ApplicationSignUpException;
/**
- * Get application signups.
+ * Get application signups available for an application.
* @return
*/
- public List<ApplicationSignUp> getApplicationSignUps(String applicationId) throws ApplicationSignUpException;
+ public ApplicationSignUp[] getApplicationSignUps(String applicationId) throws ApplicationSignUpException;
/**
* Notify artifact updated event for application signup.
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
* @throws ArtifactDistributionCoordinatorException
*/
- public void notifyArtifactUpdatedEventForSignUp(String signUpId) throws ArtifactDistributionCoordinatorException;
+ public void notifyArtifactUpdatedEventForSignUp(String applicationId, int tenantId)
+ throws ArtifactDistributionCoordinatorException;
/**
* Notify artifact updated event for artifact repository.
@@ -70,4 +75,29 @@ public interface StratosManagerService {
* @throws ArtifactDistributionCoordinatorException
*/
public void notifyArtifactUpdatedEventForRepository(String repoUrl) throws ArtifactDistributionCoordinatorException;
+
+ /**
+ * Add domain mapping
+ * @param domainMapping
+ * @throws DomainMappingException
+ */
+ public void addDomainMapping(DomainMapping domainMapping) throws DomainMappingException;
+
+ /**
+ * Get domain mappings available for application signup.
+ * @param applicationId
+ * @param tenantId
+ * @return
+ * @throws DomainMappingException
+ */
+ public DomainMapping[] getDomainMappings(String applicationId, int tenantId) throws DomainMappingException;
+
+ /**
+ * Remove domain mapping by domain name.
+ * @param applicationId
+ * @param tenantId
+ * @param domainName
+ * @throws DomainMappingException
+ */
+ public void removeDomainMapping(String applicationId, int tenantId, String domainName) throws DomainMappingException;
}
[3/5] stratos git commit: Replacing signup-id with tenant-id and
introducing domain mapping stratos manager service methods and rest api
methods
Posted by im...@apache.org.
Replacing signup-id with tenant-id and introducing domain mapping stratos manager service methods and rest api methods
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/8edb91a3
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/8edb91a3
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/8edb91a3
Branch: refs/heads/master
Commit: 8edb91a365e6a69682023e23de1cb1c01bc871fd
Parents: 1b74953
Author: Imesh Gunaratne <im...@apache.org>
Authored: Fri Jan 9 22:04:54 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Fri Jan 9 22:09:46 2015 +0530
----------------------------------------------------------------------
.../stratos/cartridge/agent/CartridgeAgent.java | 16 +-
.../extensions/DefaultExtensionHandler.java | 12 +-
.../agent/extensions/ExtensionHandler.java | 8 +-
.../common/beans/ApplicationSignUpBean.java | 9 -
.../client/StratosManagerServiceClient.java | 27 +-
.../balancer/context/LoadBalancerContext.java | 2 +-
.../context/LoadBalancerContextUtil.java | 54 ++-
.../context/map/HostNameAppContextMap.java | 6 +-
.../TenantAwareLoadBalanceEndpoint.java | 4 +-
.../internal/LoadBalancerServiceComponent.java | 4 +-
.../LoadBalancerTenantEventReceiver.java | 211 ----------
.../LoadBalancerTopologyEventReceiver.java | 421 -------------------
.../LoadBalancerDomainMappingEventReceiver.java | 89 ++++
.../LoadBalancerTenantEventReceiver.java | 156 +++++++
.../LoadBalancerTopologyEventReceiver.java | 421 +++++++++++++++++++
.../components/ApplicationSignUpHandler.java | 324 ++++++++++++++
.../components/ApplicationSignUpManager.java | 257 -----------
.../ArtifactDistributionCoordinator.java | 37 +-
.../components/DomainMappingHandler.java | 169 ++++++++
.../manager/domain/ApplicationSignUp.java | 20 +-
.../exception/DomainMappingException.java | 30 ++
.../exception/DomainMappingExistsException.java | 48 ---
.../messaging/TenantSynzhronizerTask.java | 32 +-
.../publisher/DomainMappingEventPublisher.java | 62 +++
.../InstanceNotificationPublisher.java | 1 +
...ratosManagerInstanceStatusEventReceiver.java | 13 +-
.../manager/services/StratosManagerService.java | 50 ++-
.../impl/StratosManagerServiceImpl.java | 46 +-
.../mapping/CompleteDomainMappingsEvent.java | 45 --
.../domain/mapping/DomainMappingAddedEvent.java | 21 +-
.../mapping/DomainMappingRemovedEvent.java | 20 +-
.../CompleteDomainMappingsEventListener.java | 28 --
.../CompleteDomainMappingsMessageProcessor.java | 81 ----
.../DomainMappingMessageProcessorChain.java | 9 +-
.../rest/endpoint/api/StratosApiV41.java | 25 +-
.../rest/endpoint/api/StratosApiV41Utils.java | 42 +-
.../util/converter/ObjectConverter.java | 1 -
.../main/resources/StratosManagerService.wsdl | 227 ++++++++--
38 files changed, 1675 insertions(+), 1353 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
index f294348..ffaaad4 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
@@ -36,13 +36,13 @@ import org.apache.stratos.messaging.event.Event;
import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent;
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
import org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
import org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
-import org.apache.stratos.messaging.listener.tenant.SubscriptionDomainsAddedEventListener;
-import org.apache.stratos.messaging.listener.tenant.SubscriptionDomainsRemovedEventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingAddedEventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingRemovedEventListener;
import org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventReceiver;
import org.apache.stratos.messaging.message.receiver.tenant.TenantEventReceiver;
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
@@ -428,7 +428,7 @@ public class CartridgeAgent implements Runnable {
log.debug("Starting tenant event message receiver thread");
}
TenantEventReceiver tenantEventReceiver = new TenantEventReceiver();
- tenantEventReceiver.addEventListener(new SubscriptionDomainsAddedEventListener() {
+ tenantEventReceiver.addEventListener(new DomainMappingAddedEventListener() {
@Override
protected void onEvent(Event event) {
try {
@@ -436,7 +436,7 @@ public class CartridgeAgent implements Runnable {
if (log.isDebugEnabled()) {
log.debug("Subscription domain added event received");
}
- SubscriptionDomainAddedEvent subscriptionDomainAddedEvent = (SubscriptionDomainAddedEvent) event;
+ DomainMappingAddedEvent subscriptionDomainAddedEvent = (DomainMappingAddedEvent) event;
extensionHandler.onSubscriptionDomainAddedEvent(subscriptionDomainAddedEvent);
} catch (Exception e) {
if (log.isErrorEnabled()) {
@@ -449,7 +449,7 @@ public class CartridgeAgent implements Runnable {
}
});
- tenantEventReceiver.addEventListener(new SubscriptionDomainsRemovedEventListener() {
+ tenantEventReceiver.addEventListener(new DomainMappingRemovedEventListener() {
@Override
protected void onEvent(Event event) {
try {
@@ -457,7 +457,7 @@ public class CartridgeAgent implements Runnable {
if (log.isDebugEnabled()) {
log.debug("Subscription domain removed event received");
}
- SubscriptionDomainRemovedEvent subscriptionDomainRemovedEvent = (SubscriptionDomainRemovedEvent) event;
+ DomainMappingRemovedEvent subscriptionDomainRemovedEvent = (DomainMappingRemovedEvent) event;
extensionHandler.onSubscriptionDomainRemovedEvent(subscriptionDomainRemovedEvent);
} catch (Exception e) {
if (log.isErrorEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
index eb321bc..ce11eb5 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
@@ -37,8 +37,8 @@ import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
import org.apache.stratos.messaging.event.topology.*;
@@ -946,7 +946,7 @@ public class DefaultExtensionHandler implements ExtensionHandler {
}
@Override
- public void onSubscriptionDomainAddedEvent(SubscriptionDomainAddedEvent subscriptionDomainAddedEvent) {
+ public void onSubscriptionDomainAddedEvent(DomainMappingAddedEvent subscriptionDomainAddedEvent) {
String tenantDomain = findTenantDomain(subscriptionDomainAddedEvent.getTenantId());
if (log.isInfoEnabled()) {
log.info(String.format("Subscription domain added event received: [tenant-id] %d [tenant-domain] %s " +
@@ -954,7 +954,7 @@ public class DefaultExtensionHandler implements ExtensionHandler {
subscriptionDomainAddedEvent.getTenantId(),
tenantDomain,
subscriptionDomainAddedEvent.getDomainName(),
- subscriptionDomainAddedEvent.getApplicationContext()
+ subscriptionDomainAddedEvent.getContextPath()
));
}
@@ -968,7 +968,7 @@ public class DefaultExtensionHandler implements ExtensionHandler {
env.put("STRATOS_SUBSCRIPTION_DOMAIN_NAME", subscriptionDomainAddedEvent.getDomainName());
env.put("STRATOS_SUBSCRIPTION_TENANT_ID", Integer.toString(subscriptionDomainAddedEvent.getTenantId()));
env.put("STRATOS_SUBSCRIPTION_TENANT_DOMAIN", tenantDomain);
- env.put("STRATOS_SUBSCRIPTION_APPLICATION_CONTEXT", subscriptionDomainAddedEvent.getApplicationContext());
+ env.put("STRATOS_SUBSCRIPTION_APPLICATION_CONTEXT", subscriptionDomainAddedEvent.getContextPath());
ExtensionUtils.executeSubscriptionDomainAddedExtension(env);
}
@@ -986,7 +986,7 @@ public class DefaultExtensionHandler implements ExtensionHandler {
}
@Override
- public void onSubscriptionDomainRemovedEvent(SubscriptionDomainRemovedEvent subscriptionDomainRemovedEvent) {
+ public void onSubscriptionDomainRemovedEvent(DomainMappingRemovedEvent subscriptionDomainRemovedEvent) {
String tenantDomain = findTenantDomain(subscriptionDomainRemovedEvent.getTenantId());
if (log.isInfoEnabled()) {
log.info(String.format("Subscription domain removed event received: [tenant-id] %d [tenant-domain] %s " +
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
index dd5f8ce..b710147 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/ExtensionHandler.java
@@ -23,8 +23,8 @@ import org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
import org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
import org.apache.stratos.messaging.event.tenant.CompleteTenantEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainAddedEvent;
-import org.apache.stratos.messaging.event.tenant.SubscriptionDomainRemovedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent;
import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent;
import org.apache.stratos.messaging.event.topology.*;
@@ -61,9 +61,9 @@ public interface ExtensionHandler {
public void volumeMountExtension(String persistenceMappingsPayload);
- public void onSubscriptionDomainAddedEvent(SubscriptionDomainAddedEvent subscriptionDomainAddedEvent);
+ public void onSubscriptionDomainAddedEvent(DomainMappingAddedEvent subscriptionDomainAddedEvent);
- public void onSubscriptionDomainRemovedEvent(SubscriptionDomainRemovedEvent subscriptionDomainRemovedEvent);
+ public void onSubscriptionDomainRemovedEvent(DomainMappingRemovedEvent subscriptionDomainRemovedEvent);
public void onCopyArtifactsExtension(String src, String des);
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/ApplicationSignUpBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/ApplicationSignUpBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/ApplicationSignUpBean.java
index 627210e..0577e09 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/ApplicationSignUpBean.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/ApplicationSignUpBean.java
@@ -31,18 +31,9 @@ public class ApplicationSignUpBean implements Serializable {
private static final long serialVersionUID = -3055522170914869018L;
- private String signUpId;
private String applicationId;
private List<ArtifactRepositoryBean> artifactRepositories;
- public String getSignUpId() {
- return signUpId;
- }
-
- public void setSignUpId(String signUpId) {
- this.signUpId = signUpId;
- }
-
public String getApplicationId() {
return applicationId;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
index 8df8551..f36d6a9 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/StratosManagerServiceClient.java
@@ -85,27 +85,29 @@ public class StratosManagerServiceClient {
*
* @param applicationSignUp
*/
- public String addApplicationSignUp(ApplicationSignUp applicationSignUp) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
- return stub.addApplicationSignUp(applicationSignUp);
+ public void addApplicationSignUp(ApplicationSignUp applicationSignUp) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
+ stub.addApplicationSignUp(applicationSignUp);
}
/**
* Remove application signup.
*
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
*/
- public void removeApplicationSignUp(String signUpId) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
- stub.removeApplicationSignUp(signUpId);
+ public void removeApplicationSignUp(String applicationId, int tenantId) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
+ stub.removeApplicationSignUp(applicationId, tenantId);
}
/**
* Get application signup.
*
- * @param signUpId
+ * @param applicationId
+ * @param tenantId
* @return
*/
- public ApplicationSignUp getApplicationSignUp(String signUpId) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
- return stub.getApplicationSignUp(signUpId);
+ public ApplicationSignUp getApplicationSignUp(String applicationId, int tenantId) throws StratosManagerServiceApplicationSignUpExceptionException, RemoteException {
+ return stub.getApplicationSignUp(applicationId, tenantId);
}
/**
@@ -119,16 +121,19 @@ public class StratosManagerServiceClient {
/**
* Notify artifact updated event for application signup.
- * @param signUpId
+ *
+ * @param applicationId
+ * @param tenantId
* @throws StratosManagerServiceArtifactDistributionCoordinatorExceptionException
* @throws RemoteException
*/
- public void notifyArtifactUpdatedEventForSignUp(String signUpId) throws StratosManagerServiceArtifactDistributionCoordinatorExceptionException, RemoteException {
- stub.notifyArtifactUpdatedEventForSignUp(signUpId);
+ public void notifyArtifactUpdatedEventForSignUp(String applicationId, int tenantId) throws StratosManagerServiceArtifactDistributionCoordinatorExceptionException, RemoteException {
+ stub.notifyArtifactUpdatedEventForSignUp(applicationId, tenantId);
}
/**
* Notify artifact updated event for artifact repository.
+ *
* @param repoUrl
* @throws StratosManagerServiceArtifactDistributionCoordinatorExceptionException
* @throws RemoteException
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContext.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContext.java
index 4638754..895d0d9 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContext.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContext.java
@@ -108,7 +108,7 @@ public class LoadBalancerContext {
return hostNameClusterMap;
}
- public HostNameAppContextMap getHostNameAppContextMap() {
+ public HostNameAppContextMap getHostNameContextPathMap() {
return hostNameAppContextMap;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContextUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContextUtil.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContextUtil.java
index bfe0ddf..3fec1dd 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContextUtil.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/LoadBalancerContextUtil.java
@@ -176,10 +176,10 @@ public class LoadBalancerContextUtil {
* Add clusters against domain name for the given service, cluster ids.
*
* @param serviceName
- * @param clusterIds
+ * @param clusterId
* @param domainName
*/
- public static void addClustersAgainstDomain(String serviceName, Set<String> clusterIds, String domainName) {
+ public static void addClusterAgainstDomain(String serviceName, String clusterId, String domainName) {
try {
TopologyManager.acquireReadLock();
Service service = TopologyManager.getTopology().getService(serviceName);
@@ -189,15 +189,12 @@ public class LoadBalancerContextUtil {
}
return;
}
- Cluster cluster;
- for (String clusterId : clusterIds) {
- cluster = service.getCluster(clusterId);
- if (cluster != null) {
- addClusterAgainstDomain(serviceName, cluster, domainName);
- } else {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in service: [service] %s [cluster] %s", serviceName, clusterId));
- }
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster != null) {
+ addClusterAgainstDomain(serviceName, cluster, domainName);
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Cluster not found in service: [service] %s [cluster] %s", serviceName, clusterId));
}
}
} finally {
@@ -209,10 +206,10 @@ public class LoadBalancerContextUtil {
* Remove clusters mapped against domain name for the given service, cluster ids.
*
* @param serviceName
- * @param clusterIds
+ * @param clusterId
* @param domainName
*/
- public static void removeClustersAgainstDomain(String serviceName, Set<String> clusterIds, String domainName) {
+ public static void removeClusterAgainstDomain(String serviceName, String clusterId, String domainName) {
try {
TopologyManager.acquireReadLock();
@@ -223,16 +220,13 @@ public class LoadBalancerContextUtil {
}
return;
}
- Cluster cluster;
- for (String clusterId : clusterIds) {
- cluster = service.getCluster(clusterId);
- if (cluster != null) {
- // Remove clusters mapped against domain names
- removeClusterAgainstDomain(cluster, domainName);
- } else {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in service: [service] %s [cluster] %s", serviceName, clusterId));
- }
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster != null) {
+ // Remove clusters mapped against domain names
+ removeClusterAgainstDomain(cluster, domainName);
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Cluster not found in service: [service] %s [cluster] %s", serviceName, clusterId));
}
}
} finally {
@@ -426,18 +420,18 @@ public class LoadBalancerContextUtil {
}
}
- public static void addAppContextAgainstDomain(String domainName, String appContext) {
- LoadBalancerContext.getInstance().getHostNameAppContextMap().addAppContext(domainName, appContext);
+ public static void addContextPathAgainstDomain(String domainName, String appContext) {
+ LoadBalancerContext.getInstance().getHostNameContextPathMap().addContextPath(domainName, appContext);
if (log.isDebugEnabled()) {
- log.debug(String.format("Application context added against domain name: [domain-name] %s [app-context] %s",
+ log.debug(String.format("Context path added against domain name: [domain-name] %s [context-path] %s",
domainName, appContext));
}
}
- public static void removeAppContextAgainstDomain(String domainName) {
- LoadBalancerContext.getInstance().getHostNameAppContextMap().removeAppContext(domainName);
+ public static void removeContextPathAgainstDomain(String domainName) {
+ LoadBalancerContext.getInstance().getHostNameContextPathMap().removeContextPath(domainName);
if (log.isDebugEnabled()) {
- log.debug(String.format("Application context removed against domain name: [domain-name] %s",
+ log.debug(String.format("Context path removed against domain name: [domain-name] %s",
domainName));
}
}
@@ -464,7 +458,7 @@ public class LoadBalancerContextUtil {
"[tenant-id] %d [domains] %s", serviceName, tenantId, subscription.getSubscriptionDomains()));
}
for (SubscriptionDomain subscriptionDomain : subscription.getSubscriptionDomains()) {
- removeAppContextAgainstDomain(subscriptionDomain.getDomainName());
+ removeContextPathAgainstDomain(subscriptionDomain.getDomainName());
}
} else {
if (log.isDebugEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/HostNameAppContextMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/HostNameAppContextMap.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/HostNameAppContextMap.java
index e2ccfa3..3e71093 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/HostNameAppContextMap.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/context/map/HostNameAppContextMap.java
@@ -22,7 +22,7 @@ package org.apache.stratos.load.balancer.context.map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * Host/domain name application context map.
+ * Host/domain name context path map.
*/
public class HostNameAppContextMap {
private ConcurrentHashMap<String, String> concurrentHashMap;
@@ -31,7 +31,7 @@ public class HostNameAppContextMap {
concurrentHashMap = new ConcurrentHashMap<String, String>();
}
- public void addAppContext(String hostName, String appContext) {
+ public void addContextPath(String hostName, String appContext) {
concurrentHashMap.put(hostName, appContext);
}
@@ -39,7 +39,7 @@ public class HostNameAppContextMap {
return concurrentHashMap.get(hostName);
}
- public void removeAppContext(String hostName) {
+ public void removeContextPath(String hostName) {
if(contains(hostName)) {
concurrentHashMap.remove(hostName);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
index ec25537..5aed58c 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
@@ -596,8 +596,8 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
}
String hostName = extractTargetHost(synCtx);
- if (LoadBalancerContext.getInstance().getHostNameAppContextMap().contains(hostName)) {
- String appContext = LoadBalancerContext.getInstance().getHostNameAppContextMap().getAppContext(hostName);
+ if (LoadBalancerContext.getInstance().getHostNameContextPathMap().contains(hostName)) {
+ String appContext = LoadBalancerContext.getInstance().getHostNameContextPathMap().getAppContext(hostName);
if(StringUtils.isNotBlank(appContext)) {
if (log.isDebugEnabled()) {
log.debug(String.format("Domain mapping found with application context: [domain-name] %s [app-context] %s", hostName, appContext));
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
index 739383f..20d7fe8 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java
@@ -27,8 +27,8 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.common.clustering.DistributedObjectProvider;
import org.apache.stratos.common.threading.StratosThreadPool;
import org.apache.stratos.load.balancer.endpoint.EndpointDeployer;
-import org.apache.stratos.load.balancer.messaging.LoadBalancerTenantEventReceiver;
-import org.apache.stratos.load.balancer.messaging.LoadBalancerTopologyEventReceiver;
+import org.apache.stratos.load.balancer.messaging.receiver.LoadBalancerTenantEventReceiver;
+import org.apache.stratos.load.balancer.messaging.receiver.LoadBalancerTopologyEventReceiver;
import org.apache.stratos.load.balancer.exception.TenantAwareLoadBalanceEndpointException;
import org.apache.stratos.load.balancer.common.statistics.notifier.LoadBalancerStatisticsNotifier;
import org.apache.stratos.load.balancer.conf.LoadBalancerConfiguration;
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTenantEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTenantEventReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTenantEventReceiver.java
deleted file mode 100644
index e729dd5..0000000
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTenantEventReceiver.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.load.balancer.messaging;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
-import org.apache.stratos.messaging.domain.tenant.Subscription;
-import org.apache.stratos.messaging.domain.tenant.SubscriptionDomain;
-import org.apache.stratos.messaging.domain.tenant.Tenant;
-import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.domain.topology.ServiceType;
-import org.apache.stratos.messaging.event.Event;
-import org.apache.stratos.messaging.event.tenant.*;
-import org.apache.stratos.messaging.listener.tenant.*;
-import org.apache.stratos.messaging.message.receiver.tenant.TenantEventReceiver;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-
-/**
- * Load balancer tenant receiver updates load balancer context according to
- * incoming tenant events.
- */
-public class LoadBalancerTenantEventReceiver{
-
- private static final Log log = LogFactory.getLog(LoadBalancerTenantEventReceiver.class);
-
- private final TenantEventReceiver tenantEventReceiver;
- private boolean terminated;
-
- public LoadBalancerTenantEventReceiver() {
- tenantEventReceiver = new TenantEventReceiver();
- addEventListeners();
- }
-
- private void addEventListeners() {
- tenantEventReceiver.addEventListener(new CompleteTenantEventListener() {
- private boolean initialized;
-
- @Override
- protected void onEvent(Event event) {
- if (!initialized) {
- CompleteTenantEvent completeTenantEvent = (CompleteTenantEvent) event;
- if (log.isDebugEnabled()) {
- log.debug("Complete tenant event received");
- }
- for (Tenant tenant : completeTenantEvent.getTenants()) {
- for (Subscription subscription : tenant.getSubscriptions()) {
- if (isMultiTenantService(subscription.getServiceName())) {
- LoadBalancerContextUtil.addClustersAgainstHostNamesAndTenantIds(
- subscription.getServiceName(),
- tenant.getTenantId(),
- subscription.getClusterIds());
- }
-
- for (SubscriptionDomain subscriptionDomain : subscription.getSubscriptionDomains()) {
- LoadBalancerContextUtil.addClustersAgainstDomain(
- subscription.getServiceName(),
- subscription.getClusterIds(),
- subscriptionDomain.getDomainName());
-
- LoadBalancerContextUtil.addAppContextAgainstDomain(subscriptionDomain.getDomainName(),
- subscriptionDomain.getApplicationContext());
- }
- }
- }
- initialized = true;
- }
- }
- });
- tenantEventReceiver.addEventListener(new TenantSubscribedEventListener() {
- @Override
- protected void onEvent(Event event) {
- TenantSubscribedEvent tenantSubscribedEvent = (TenantSubscribedEvent) event;
- if (log.isDebugEnabled()) {
- log.debug(String.format("Tenant subscribed event received: [tenant-id] %d [service] %s [cluster-ids] %s",
- tenantSubscribedEvent.getTenantId(),
- tenantSubscribedEvent.getServiceName(),
- tenantSubscribedEvent.getClusterIds()));
- }
-
- if (isMultiTenantService(tenantSubscribedEvent.getServiceName())) {
- LoadBalancerContextUtil.addClustersAgainstHostNamesAndTenantIds(
- tenantSubscribedEvent.getServiceName(),
- tenantSubscribedEvent.getTenantId(),
- tenantSubscribedEvent.getClusterIds());
- }
- }
- });
- tenantEventReceiver.addEventListener(new TenantUnSubscribedEventListener() {
- @Override
- protected void onEvent(Event event) {
- TenantUnSubscribedEvent tenantUnSubscribedEvent = (TenantUnSubscribedEvent) event;
- if (log.isDebugEnabled()) {
- log.debug(String.format("Tenant un-subscribed event received: [tenant-id] %d [service] %s [cluster-ids] %s",
- tenantUnSubscribedEvent.getTenantId(),
- tenantUnSubscribedEvent.getServiceName(),
- tenantUnSubscribedEvent.getClusterIds()));
- }
-
- if (isMultiTenantService(tenantUnSubscribedEvent.getServiceName())) {
- LoadBalancerContextUtil.removeClustersAgainstHostNamesAndTenantIds(
- tenantUnSubscribedEvent.getServiceName(),
- tenantUnSubscribedEvent.getTenantId(),
- tenantUnSubscribedEvent.getClusterIds()
- );
- }
-
- LoadBalancerContextUtil.removeClustersAgainstAllDomains(
- tenantUnSubscribedEvent.getServiceName(),
- tenantUnSubscribedEvent.getTenantId(),
- tenantUnSubscribedEvent.getClusterIds());
-
- LoadBalancerContextUtil.removeAppContextAgainstAllDomains(
- tenantUnSubscribedEvent.getServiceName(),
- tenantUnSubscribedEvent.getTenantId());
- }
- });
- tenantEventReceiver.addEventListener(new SubscriptionDomainsAddedEventListener() {
- @Override
- protected void onEvent(Event event) {
- SubscriptionDomainAddedEvent subscriptionDomainAddedEvent = (SubscriptionDomainAddedEvent) event;
- if (log.isDebugEnabled()) {
- log.debug(String.format("Tenant subscription domain added event received: [tenant-id] %d " +
- "[service] %s [cluster-ids] %s [domain-name] %s",
- subscriptionDomainAddedEvent.getTenantId(),
- subscriptionDomainAddedEvent.getServiceName(),
- subscriptionDomainAddedEvent.getClusterIds(),
- subscriptionDomainAddedEvent.getDomainName()));
- }
-
- LoadBalancerContextUtil.addClustersAgainstDomain(
- subscriptionDomainAddedEvent.getServiceName(),
- subscriptionDomainAddedEvent.getClusterIds(),
- subscriptionDomainAddedEvent.getDomainName());
-
- LoadBalancerContextUtil.addAppContextAgainstDomain(
- subscriptionDomainAddedEvent.getDomainName(),
- subscriptionDomainAddedEvent.getApplicationContext());
- }
- });
- tenantEventReceiver.addEventListener(new SubscriptionDomainsRemovedEventListener() {
- @Override
- protected void onEvent(Event event) {
- SubscriptionDomainRemovedEvent subscriptionDomainRemovedEvent = (SubscriptionDomainRemovedEvent) event;
- if (log.isDebugEnabled()) {
- log.debug(String.format("Tenant subscription domain removed event received: [tenant-id] %d " +
- "[service] %s [cluster-ids] %s [domain-name] %s",
- subscriptionDomainRemovedEvent.getTenantId(),
- subscriptionDomainRemovedEvent.getServiceName(),
- subscriptionDomainRemovedEvent.getClusterIds(),
- subscriptionDomainRemovedEvent.getDomainName()));
- }
-
- LoadBalancerContextUtil.removeClustersAgainstDomain(
- subscriptionDomainRemovedEvent.getServiceName(),
- subscriptionDomainRemovedEvent.getClusterIds(),
- subscriptionDomainRemovedEvent.getDomainName());
-
- LoadBalancerContextUtil.removeAppContextAgainstDomain(
- subscriptionDomainRemovedEvent.getDomainName());
- }
- });
- }
-
- private boolean isMultiTenantService(String serviceName) {
- try {
- TopologyManager.acquireReadLock();
- Service service = TopologyManager.getTopology().getService(serviceName);
- if (service != null) {
- return (service.getServiceType() == ServiceType.MultiTenant);
- }
- return false;
- } finally {
- TopologyManager.releaseReadLock();
- }
- }
-
-
- public void execute() {
- tenantEventReceiver.execute();
-
- if (log.isInfoEnabled()) {
- log.info("Load balancer tenant receiver thread terminated");
- }
- }
-
- /**
- * Terminate load balancer tenant receiver thread.
- */
- public void terminate() {
- tenantEventReceiver.terminate();
- terminated = true;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTopologyEventReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTopologyEventReceiver.java
deleted file mode 100644
index 4c75bf2..0000000
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/LoadBalancerTopologyEventReceiver.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.load.balancer.messaging;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.load.balancer.context.LoadBalancerContext;
-import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
-import org.apache.stratos.load.balancer.context.map.AlgorithmContextMap;
-import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.messaging.domain.topology.Member;
-import org.apache.stratos.messaging.domain.topology.MemberStatus;
-import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.event.Event;
-import org.apache.stratos.messaging.event.topology.*;
-import org.apache.stratos.messaging.listener.topology.*;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-
-import java.util.concurrent.ExecutorService;
-
-/**
- * Load balancer topology receiver updates load balancer context according to
- * incoming topology events.
- */
-public class LoadBalancerTopologyEventReceiver {
-
- private static final Log log = LogFactory.getLog(LoadBalancerTopologyEventReceiver.class);
- private ExecutorService executorService;
- private TopologyEventReceiver topologyEventReceiver;
- private boolean terminated;
-
- public LoadBalancerTopologyEventReceiver() {
- this.topologyEventReceiver = new TopologyEventReceiver();
- addEventListeners();
- }
-
- public void execute() {
- topologyEventReceiver.setExecutorService(executorService);
- topologyEventReceiver.execute();
- if (log.isInfoEnabled()) {
- log.info("Load balancer topology receiver thread started");
- }
-
-
- }
-
- private void addEventListeners() {
- // Listen to topology events that affect clusters
- topologyEventReceiver.addEventListener(new CompleteTopologyEventListener() {
- private boolean initialized;
-
- @Override
- protected void onEvent(Event event) {
- if(!initialized) {
- try {
- TopologyManager.acquireReadLock();
- for (Service service : TopologyManager.getTopology().getServices()) {
- for (Cluster cluster : service.getClusters()) {
- if (clusterHasActiveMembers(cluster)) {
- LoadBalancerContextUtil.addClusterAgainstHostNames(cluster);
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Cluster does not have any active members");
- }
- }
- for (Member member : cluster.getMembers()) {
- if (member.getStatus() == MemberStatus.Activated) {
- addMemberIpsToMemberIpHostnameMap(cluster, member);
- }
-
- }
- }
- }
- initialized = true;
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- TopologyManager.releaseReadLock();
- }
- }
- }
-
- private boolean clusterHasActiveMembers(Cluster cluster) {
- for (Member member : cluster.getMembers()) {
- if (member.getStatus() == MemberStatus.Activated) {
- return true;
- }
- }
- return false;
- }
- });
- topologyEventReceiver.addEventListener(new MemberActivatedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event;
-
- //TopologyManager.acquireReadLock();
- TopologyManager.acquireReadLockForCluster(memberActivatedEvent.getServiceName(),
- memberActivatedEvent.getClusterId());
-
- try {
-
- Service service = TopologyManager.getTopology().getService(memberActivatedEvent.getServiceName());
- if (service == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Service not found in topology: [service] %s",
- memberActivatedEvent.getServiceName()));
- }
- return;
- }
- Cluster cluster = service.getCluster(memberActivatedEvent.getClusterId());
- if (cluster == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in topology: [service] %s [cluster] %s",
- memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId()));
- }
- return;
- }
- Member member = cluster.getMember(memberActivatedEvent.getMemberId());
- if (member == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Member not found in topology: [service] %s [cluster] %s [member] %s",
- memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId(),
- memberActivatedEvent.getMemberId()));
- }
- return;
- }
-
- // Add member to member-ip -> hostname map
- addMemberIpsToMemberIpHostnameMap(cluster, member);
-
- if (LoadBalancerContext.getInstance().getClusterIdClusterMap().containsCluster(
- member.getClusterId())) {
- if (log.isDebugEnabled()) {
- log.debug(String.format("Cluster already exists in load balancer context: [service] %s " +
- "[cluster] %s", member.getServiceName(), member.getClusterId()));
- }
- // At this point member is already added to the cluster object in load balancer context
- return;
- }
-
- // Add cluster to load balancer context when its first member is activated:
- // Cluster not found in load balancer context, add it
- LoadBalancerContextUtil.addClusterAgainstHostNames(cluster);
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- //TopologyManager.releaseReadLock();
- TopologyManager.releaseReadLockForCluster(memberActivatedEvent.getServiceName(),
- memberActivatedEvent.getClusterId());
- }
- }
- });
- topologyEventReceiver.addEventListener(new MemberMaintenanceListener() {
- @Override
- protected void onEvent(Event event) {
-
- MemberMaintenanceModeEvent memberMaintenanceModeEvent = (MemberMaintenanceModeEvent) event;
-
- TopologyManager.acquireReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
- memberMaintenanceModeEvent.getClusterId());
-
- try {
- //TopologyManager.acquireReadLock();
-
- Member member = findMember(memberMaintenanceModeEvent.getServiceName(),
- memberMaintenanceModeEvent.getClusterId(), memberMaintenanceModeEvent.getMemberId());
-
- if (member != null) {
- removeMemberIpsFromMemberIpHostnameMap(member);
- }
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- //TopologyManager.releaseReadLock();
- TopologyManager.releaseReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
- memberMaintenanceModeEvent.getClusterId());
- }
- }
- });
- topologyEventReceiver.addEventListener(new MemberSuspendedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- MemberSuspendedEvent memberSuspendedEvent = (MemberSuspendedEvent) event;
- TopologyManager.acquireReadLockForCluster(memberSuspendedEvent.getServiceName(),
- memberSuspendedEvent.getClusterId());
-
- try {
- //TopologyManager.acquireReadLock();
- Member member = findMember(memberSuspendedEvent.getServiceName(),
- memberSuspendedEvent.getClusterId(), memberSuspendedEvent.getMemberId());
-
- if (member != null) {
- removeMemberIpsFromMemberIpHostnameMap(member);
- }
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- //TopologyManager.releaseReadLock();
- TopologyManager.releaseReadLockForCluster(memberSuspendedEvent.getServiceName(),
- memberSuspendedEvent.getClusterId());
- }
- }
- });
- topologyEventReceiver.addEventListener(new MemberTerminatedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- //TopologyManager.acquireReadLock();
- MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event;
-
- TopologyManager.acquireReadLockForCluster(memberTerminatedEvent.getServiceName(),
- memberTerminatedEvent.getClusterId());
-
- try {
- Member member = findMember(memberTerminatedEvent.getServiceName(),
- memberTerminatedEvent.getClusterId(), memberTerminatedEvent.getMemberId());
-
- if (member != null) {
- removeMemberIpsFromMemberIpHostnameMap(member);
- }
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- //TopologyManager.releaseReadLock();
- TopologyManager.releaseReadLockForCluster(memberTerminatedEvent.getServiceName(),
- memberTerminatedEvent.getClusterId());
- }
- }
- });
- topologyEventReceiver.addEventListener(new ClusterRemovedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- // Remove cluster from context
- ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event;
- TopologyManager.acquireReadLockForCluster(clusterRemovedEvent.getServiceName(),
- clusterRemovedEvent.getClusterId());
-
- try {
- AlgorithmContextMap.getInstance().removeCluster(clusterRemovedEvent.getServiceName(),
- clusterRemovedEvent.getClusterId());
- } catch (Exception e) {
- log.error("Could not remove cluster from load balancer algorithm context map", e);
- }
-
- try {
- Cluster cluster = LoadBalancerContext.getInstance().getClusterIdClusterMap().getCluster(clusterRemovedEvent.getClusterId());
- if (cluster != null) {
- for (Member member : cluster.getMembers()) {
- removeMemberIpsFromMemberIpHostnameMap(member);
- }
- LoadBalancerContextUtil.removeClusterAgainstHostNames(cluster.getClusterId());
- } else {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in load balancer context: [service] %s [cluster] %s",
- clusterRemovedEvent.getServiceName(), clusterRemovedEvent.getClusterId()));
- }
- }
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- TopologyManager.releaseReadLockForCluster(clusterRemovedEvent.getServiceName(),
- clusterRemovedEvent.getClusterId());
- }
- }
- });
- topologyEventReceiver.addEventListener(new ServiceRemovedEventListener() {
- @Override
- protected void onEvent(Event event) {
-
- ServiceRemovedEvent serviceRemovedEvent = (ServiceRemovedEvent) event;
- TopologyManager.acquireReadLockForService(serviceRemovedEvent.getServiceName());
-
- try {
- //TopologyManager.acquireReadLock();
-
- // Remove all clusters of given service from context
- Service service = TopologyManager.getTopology().getService(serviceRemovedEvent.getServiceName());
- if (service != null) {
- for (Cluster cluster : service.getClusters()) {
- for (Member member : cluster.getMembers()) {
- removeMemberIpsFromMemberIpHostnameMap(member);
- }
- LoadBalancerContextUtil.removeClusterAgainstHostNames(cluster.getClusterId());
- }
- } else {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Service not found in topology: [service] %s",
- serviceRemovedEvent.getServiceName()));
- }
- }
- } catch (Exception e) {
- log.error("Error processing event", e);
- } finally {
- //TopologyManager.releaseReadLock();
- TopologyManager.releaseReadLockForService(serviceRemovedEvent.getServiceName());
- }
- }
- });
- }
-
- private Member findMember(String serviceName, String clusterId, String memberId) {
- Service service = TopologyManager.getTopology().getService(serviceName);
- if (service == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Service not found in topology: [service] %s", serviceName));
- }
- return null;
- }
-
- Cluster cluster = service.getCluster(clusterId);
- if (cluster == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Cluster not found in topology: [service] %s [cluster] %s", serviceName, clusterId));
- }
- return null;
- }
-
- Member member = cluster.getMember(memberId);
- if (member == null) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Member not found in topology: [service] %s [cluster] %s [member] %s", serviceName,
- clusterId, memberId));
- }
- return null;
- }
- return member;
- }
-
- private void addMemberIpsToMemberIpHostnameMap(Cluster cluster, Member member) {
- if ((cluster.getHostNames() == null) || (cluster.getHostNames().size() == 0)) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Hostnames not found in cluster %s, could not add member ips to member-ip " +
- "-> hostname map", member.getClusterId()));
- }
- return;
- }
-
- String hostname = cluster.getHostNames().get(0);
- if (cluster.getHostNames().size() > 1) {
- if (log.isWarnEnabled()) {
- log.warn(String.format("Multiple hostnames found in cluster %s, using %s",
- cluster.getHostNames().toString(), hostname));
- }
- }
-
- if (StringUtils.isNotBlank(member.getDefaultPrivateIP())) {
- LoadBalancerContext.getInstance().getMemberIpHostnameMap().put(member.getDefaultPrivateIP(), hostname);
- if (log.isDebugEnabled()) {
- log.debug(String.format("Member private ip added to member-ip -> hostname map: [service] %s [cluster] " +
- "%s [member] %s [private-ip] %s", member.getServiceName(), member.getClusterId(),
- member.getMemberId(), member.getDefaultPrivateIP()
- ));
- }
- }
- if (StringUtils.isNotBlank(member.getDefaultPublicIP())) {
- LoadBalancerContext.getInstance().getMemberIpHostnameMap().put(member.getDefaultPublicIP(), hostname);
- if (log.isDebugEnabled()) {
- log.debug(String.format("Member public ip added to member-ip -> hostname map: [service] %s [cluster] " +
- "%s [member] %s [public-ip] %s", member.getServiceName(), member.getClusterId(),
- member.getMemberId(), member.getDefaultPublicIP()
- ));
- }
- }
- }
-
- private void removeMemberIpsFromMemberIpHostnameMap(Member member) {
- if (StringUtils.isNotBlank(member.getDefaultPrivateIP())) {
- LoadBalancerContext.getInstance().getMemberIpHostnameMap().remove(member.getDefaultPrivateIP());
- if (log.isDebugEnabled()) {
- log.debug(String.format("Member private ip removed from member-ip -> hostname map: [private-ip] %s",
- member.getDefaultPrivateIP()));
- }
- }
- if (StringUtils.isNotBlank(member.getDefaultPublicIP())) {
- LoadBalancerContext.getInstance().getMemberIpHostnameMap().remove(member.getDefaultPublicIP());
- if (log.isDebugEnabled()) {
- log.debug(String.format("Member public ip removed from member-ip -> hostname map: [public-ip] %s",
- member.getDefaultPublicIP()));
- }
- }
- }
-
- /**
- * Terminate load balancer topology receiver thread.
- */
- public void terminate() {
- topologyEventReceiver.terminate();
- terminated = true;
- }
-
- public ExecutorService getExecutorService() {
- return executorService;
- }
-
- public void setExecutorService(ExecutorService executorService) {
- this.executorService = executorService;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerDomainMappingEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerDomainMappingEventReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerDomainMappingEventReceiver.java
new file mode 100644
index 0000000..78d7950
--- /dev/null
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerDomainMappingEventReceiver.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.load.balancer.messaging.receiver;
+
+import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
+import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingAddedEvent;
+import org.apache.stratos.messaging.event.domain.mapping.DomainMappingRemovedEvent;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingAddedEventListener;
+import org.apache.stratos.messaging.listener.domain.mapping.DomainMappingRemovedEventListener;
+import org.apache.stratos.messaging.message.receiver.domain.mapping.DomainMappingEventReceiver;
+
+/**
+ * Load balancer domain mapping event receiver.
+ */
+public class LoadBalancerDomainMappingEventReceiver extends DomainMappingEventReceiver {
+
+ public LoadBalancerDomainMappingEventReceiver() {
+ addEventListeners();
+ }
+
+ private void addEventListeners() {
+
+// addEventListener(new CompleteDomainMappingsEventListener() {
+// @Override
+// protected void onEvent(Event event) {
+// CompleteDomainMappingsEvent completeDomainMappingsEvent = (CompleteDomainMappingsEvent)event;
+//
+// for(DomainMapping domainMapping : completeDomainMappingsEvent.getDomainMappings()) {
+// LoadBalancerContextUtil.addClusterAgainstDomain(
+// domainMapping.getServiceName(),
+// domainMapping.getClusterId(),
+// domainMapping.getDomainName());
+//
+// LoadBalancerContextUtil.addContextPathAgainstDomain(domainMapping.getDomainName(),
+// domainMapping.getContextPath());
+// }
+// }
+// });
+
+ addEventListener(new DomainMappingAddedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ DomainMappingAddedEvent domainMappingAddedEvent = (DomainMappingAddedEvent)event;
+
+ LoadBalancerContextUtil.addClusterAgainstDomain(
+ domainMappingAddedEvent.getServiceName(),
+ domainMappingAddedEvent.getClusterId(),
+ domainMappingAddedEvent.getDomainName());
+
+ LoadBalancerContextUtil.addContextPathAgainstDomain(
+ domainMappingAddedEvent.getDomainName(),
+ domainMappingAddedEvent.getContextPath());
+ }
+ });
+
+ addEventListener(new DomainMappingRemovedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ DomainMappingRemovedEvent domainMappingRemovedEvent = (DomainMappingRemovedEvent)event;
+
+ LoadBalancerContextUtil.removeClusterAgainstDomain(
+ domainMappingRemovedEvent.getServiceName(),
+ domainMappingRemovedEvent.getClusterId(),
+ domainMappingRemovedEvent.getDomainName());
+
+ LoadBalancerContextUtil.removeContextPathAgainstDomain(
+ domainMappingRemovedEvent.getDomainName());
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8edb91a3/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTenantEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTenantEventReceiver.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTenantEventReceiver.java
new file mode 100644
index 0000000..b223de8
--- /dev/null
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/messaging/receiver/LoadBalancerTenantEventReceiver.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.load.balancer.messaging.receiver;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
+import org.apache.stratos.messaging.domain.tenant.Subscription;
+import org.apache.stratos.messaging.domain.tenant.Tenant;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.ServiceType;
+import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.event.tenant.*;
+import org.apache.stratos.messaging.listener.tenant.*;
+import org.apache.stratos.messaging.message.receiver.tenant.TenantEventReceiver;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+
+/**
+ * Load balancer tenant receiver updates load balancer context according to
+ * incoming tenant events.
+ */
+public class LoadBalancerTenantEventReceiver{
+
+ private static final Log log = LogFactory.getLog(LoadBalancerTenantEventReceiver.class);
+
+ private final TenantEventReceiver tenantEventReceiver;
+ private boolean terminated;
+
+ public LoadBalancerTenantEventReceiver() {
+ tenantEventReceiver = new TenantEventReceiver();
+ addEventListeners();
+ }
+
+ private void addEventListeners() {
+ tenantEventReceiver.addEventListener(new CompleteTenantEventListener() {
+ private boolean initialized;
+
+ @Override
+ protected void onEvent(Event event) {
+ if (!initialized) {
+ CompleteTenantEvent completeTenantEvent = (CompleteTenantEvent) event;
+ if (log.isDebugEnabled()) {
+ log.debug("Complete tenant event received");
+ }
+ for (Tenant tenant : completeTenantEvent.getTenants()) {
+ for (Subscription subscription : tenant.getSubscriptions()) {
+ if (isMultiTenantService(subscription.getServiceName())) {
+ LoadBalancerContextUtil.addClustersAgainstHostNamesAndTenantIds(
+ subscription.getServiceName(),
+ tenant.getTenantId(),
+ subscription.getClusterIds());
+ }
+ }
+ }
+ initialized = true;
+ }
+ }
+ });
+
+ tenantEventReceiver.addEventListener(new TenantSubscribedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ TenantSubscribedEvent tenantSubscribedEvent = (TenantSubscribedEvent) event;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Tenant subscribed event received: [tenant-id] %d [service] %s [cluster-ids] %s",
+ tenantSubscribedEvent.getTenantId(),
+ tenantSubscribedEvent.getServiceName(),
+ tenantSubscribedEvent.getClusterIds()));
+ }
+
+ if (isMultiTenantService(tenantSubscribedEvent.getServiceName())) {
+ LoadBalancerContextUtil.addClustersAgainstHostNamesAndTenantIds(
+ tenantSubscribedEvent.getServiceName(),
+ tenantSubscribedEvent.getTenantId(),
+ tenantSubscribedEvent.getClusterIds());
+ }
+ }
+ });
+
+ tenantEventReceiver.addEventListener(new TenantUnSubscribedEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+ TenantUnSubscribedEvent tenantUnSubscribedEvent = (TenantUnSubscribedEvent) event;
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Tenant un-subscribed event received: [tenant-id] %d [service] %s [cluster-ids] %s",
+ tenantUnSubscribedEvent.getTenantId(),
+ tenantUnSubscribedEvent.getServiceName(),
+ tenantUnSubscribedEvent.getClusterIds()));
+ }
+
+ if (isMultiTenantService(tenantUnSubscribedEvent.getServiceName())) {
+ LoadBalancerContextUtil.removeClustersAgainstHostNamesAndTenantIds(
+ tenantUnSubscribedEvent.getServiceName(),
+ tenantUnSubscribedEvent.getTenantId(),
+ tenantUnSubscribedEvent.getClusterIds()
+ );
+ }
+
+ LoadBalancerContextUtil.removeClustersAgainstAllDomains(
+ tenantUnSubscribedEvent.getServiceName(),
+ tenantUnSubscribedEvent.getTenantId(),
+ tenantUnSubscribedEvent.getClusterIds());
+
+ LoadBalancerContextUtil.removeAppContextAgainstAllDomains(
+ tenantUnSubscribedEvent.getServiceName(),
+ tenantUnSubscribedEvent.getTenantId());
+ }
+ });
+ }
+
+ private boolean isMultiTenantService(String serviceName) {
+ try {
+ TopologyManager.acquireReadLock();
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service != null) {
+ return (service.getServiceType() == ServiceType.MultiTenant);
+ }
+ return false;
+ } finally {
+ TopologyManager.releaseReadLock();
+ }
+ }
+
+ public void execute() {
+ tenantEventReceiver.execute();
+
+ if (log.isInfoEnabled()) {
+ log.info("Load balancer tenant receiver thread terminated");
+ }
+ }
+
+ /**
+ * Terminate load balancer tenant receiver thread.
+ */
+ public void terminate() {
+ tenantEventReceiver.terminate();
+ terminated = true;
+ }
+}
[4/5] stratos git commit: Introducing domain mapping messaging events,
listeners, processors, receiver & manager
Posted by im...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingManager.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingManager.java
new file mode 100644
index 0000000..a23bf9a
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/domain/mapping/DomainMappingManager.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.message.receiver.domain.mapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.domain.mapping.DomainMapping;
+
+import java.util.*;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Domain mapping manager.
+ */
+public class DomainMappingManager {
+
+ private static final Log log = LogFactory.getLog(DomainMappingManager.class);
+
+ private static volatile DomainMappingManager instance;
+ private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
+ private static volatile ReentrantReadWriteLock.ReadLock readLock = lock.readLock();
+ private static volatile ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
+
+ private Map<String, List<DomainMapping>> clusterIdToDomainMappingsMap;
+ private boolean initialized;
+
+ public static void acquireReadLock() {
+ if(log.isDebugEnabled()) {
+ log.debug("Read lock acquired");
+ }
+ readLock.lock();
+ }
+
+ public static void releaseReadLock() {
+ if(log.isDebugEnabled()) {
+ log.debug("Read lock released");
+ }
+ readLock.unlock();
+ }
+
+ public static void acquireWriteLock() {
+ if(log.isDebugEnabled()) {
+ log.debug("Write lock acquired");
+ }
+ writeLock.lock();
+ }
+
+ public static void releaseWriteLock() {
+ if(log.isDebugEnabled()) {
+ log.debug("Write lock released");
+ }
+ writeLock.unlock();
+ }
+
+ public static DomainMappingManager getInstance() {
+ if (instance == null) {
+ synchronized (DomainMappingManager.class){
+ if (instance == null) {
+ instance = new DomainMappingManager();
+ if(log.isDebugEnabled()) {
+ log.debug("Domain mapping manager instance created");
+ }
+ }
+ }
+ }
+ return instance;
+ }
+
+ private DomainMappingManager() {
+ clusterIdToDomainMappingsMap = new HashMap<String, List<DomainMapping>>();
+ }
+
+ /**
+ * Add domain mappings
+ * @param domainMappings
+ */
+ public void addDomainMappings(List<DomainMapping> domainMappings) {
+ for(DomainMapping domainMapping : domainMappings) {
+ addDomainMapping(domainMapping);
+ }
+ }
+
+ /**
+ * Add domain mapping.
+ * @param domainMapping
+ */
+ public void addDomainMapping(DomainMapping domainMapping) {
+ List<DomainMapping> domainMappings = getDomainMappings(domainMapping.getClusterId());
+ if(domainMappings == null) {
+ domainMappings = new ArrayList<DomainMapping>();
+ clusterIdToDomainMappingsMap.put(domainMapping.getClusterId(), domainMappings);
+ }
+ domainMappings.add(domainMapping);
+ }
+
+ /**
+ * Get domain mappings of cluster.
+ * @param clusterId
+ * @return
+ */
+ public List<DomainMapping> getDomainMappings(String clusterId) {
+ if(clusterIdToDomainMappingsMap.containsKey(clusterId)) {
+ return clusterIdToDomainMappingsMap.get(clusterId);
+ }
+ return null;
+ }
+
+ /**
+ * Get domain mapping of cluster by domain name.
+ * @param clusterId
+ * @param domainName
+ * @return
+ */
+ public DomainMapping getDomainMapping(String clusterId, String domainName) {
+ List<DomainMapping> domainMappings = getDomainMappings(clusterId);
+ if(domainMappings == null) {
+ log.warn(String.format("Domain mappings not found for cluster: [cluster-id] %s", clusterId));
+ return null;
+ }
+
+ Iterator<DomainMapping> iterator = domainMappings.iterator();
+ while(iterator.hasNext()) {
+ DomainMapping domainMapping = iterator.next();
+ if(domainMapping.getDomainName().equals(domainName)) {
+ return domainMapping;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Remove domain mapping of cluster by domain name.
+ * @param clusterId
+ * @param domainName
+ */
+ public void removeDomainMapping(String clusterId, String domainName) {
+ List<DomainMapping> domainMappings = getDomainMappings(clusterId);
+ if(domainMappings == null) {
+ throw new RuntimeException(String.format("Domain mappings not found for cluster: [cluster-id] %s", clusterId));
+ }
+
+ Iterator<DomainMapping> iterator = domainMappings.iterator();
+ while(iterator.hasNext()) {
+ DomainMapping domainMapping = iterator.next();
+ if(domainMapping.getDomainName().equals(domainName)) {
+ iterator.remove();
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Domain mapping removed: [cluster-id] %s [domain-name] %s",
+ clusterId, domainName));
+ }
+ return;
+ }
+ }
+ }
+
+ public void setInitialized(boolean initialized) {
+ this.initialized = initialized;
+ }
+
+ public boolean isInitialized() {
+ return initialized;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java
index 460e740..f7a792c 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java
@@ -51,7 +51,6 @@ public class TenantEventReceiver{
try {
// Start topic subscriber thread
topicSubscriber = new TopicSubscriber(Util.Topics.TENANT_TOPIC.getTopicName(), messageListener);
-// subscriber.setMessageListener(messageListener);
Thread subscriberThread = new Thread(topicSubscriber);
subscriberThread.start();
if (log.isDebugEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventMessageDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventMessageDelegator.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventMessageDelegator.java
index a1da2a8..cd3424c 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventMessageDelegator.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventMessageDelegator.java
@@ -33,6 +33,7 @@ import org.apache.stratos.messaging.message.processor.topology.TopologyMessagePr
class TopologyEventMessageDelegator implements Runnable {
private static final Log log = LogFactory.getLog(TopologyEventMessageDelegator.class);
+
private MessageProcessorChain processorChain;
private TopologyEventMessageQueue messageQueue;
private boolean terminated;
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventReceiver.java
index 1d4a9b2..a2e2050 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventReceiver.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/topology/TopologyEventReceiver.java
@@ -32,7 +32,9 @@ import java.util.concurrent.ExecutorService;
* build topology in topology manager.
*/
public class TopologyEventReceiver {
+
private static final Log log = LogFactory.getLog(TopologyEventReceiver.class);
+
private TopologyEventMessageDelegator messageDelegator;
private TopologyEventMessageListener messageListener;
private TopicSubscriber topicSubscriber;
http://git-wip-us.apache.org/repos/asf/stratos/blob/1b749533/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java
index d060231..eee8152 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Util.java
@@ -65,7 +65,8 @@ public class Util {
INSTANCE_NOTIFIER_TOPIC("instance/notifier/#"),
APPLICATIONS_TOPIC("applications/#"),
CLUSTER_STATUS_TOPIC("cluster/status/#"),
- TENANT_TOPIC("tenant/#");
+ TENANT_TOPIC("tenant/#"),
+ DOMAIN_MAPPING_TOPIC("domain/mappings/#");
private String topicName;