diff --git a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml b/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
index 5e799c06483..a10bbb38703 100644
--- a/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
+++ b/core/resources/META-INF/cloudstack/core/spring-core-registry-core-context.xml
@@ -229,6 +229,11 @@
+
+
+
+
diff --git a/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml b/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
index a54d58818bc..76cdfe3e749 100644
--- a/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
+++ b/core/resources/META-INF/cloudstack/network/spring-core-lifecycle-network-context-inheritable.xml
@@ -96,5 +96,9 @@
-
-
\ No newline at end of file
+
+
+
+
+
diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index 31f31cd972a..a5f9a0bc36f 100644
--- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -231,7 +231,8 @@
-
+ class="org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImpl" >
+
+
diff --git a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
index 62b9748de3a..d4275d4ce2b 100644
--- a/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
+++ b/server/src/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImpl.java
@@ -85,9 +85,10 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
@Inject
AgentManager _agentMgr;
- protected GslbServiceProvider _gslbProvider=null;
- public void setGslbServiceProvider(GslbServiceProvider provider) {
- this._gslbProvider = provider;
+ protected List _gslbProviders;
+
+ public void setGslbServiceProviders(List providers) {
+ _gslbProviders = providers;
}
@Override
@@ -663,8 +664,8 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
ip.getAddress().addr(), Integer.toString(loadBalancer.getDefaultPortStart()),
dataCenterId);
- siteLb.setGslbProviderPublicIp(_gslbProvider.getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
- siteLb.setGslbProviderPrivateIp(_gslbProvider.getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
+ siteLb.setGslbProviderPublicIp(lookupGslbServiceProvider().getZoneGslbProviderPublicIp(dataCenterId, physicalNetworkId));
+ siteLb.setGslbProviderPrivateIp(lookupGslbServiceProvider().getZoneGslbProviderPrivateIp(dataCenterId, physicalNetworkId));
siteLb.setWeight(gslbLbMapVo.getWeight());
zoneSiteLoadbalancerMap.put(network.getDataCenterId(), siteLb);
@@ -693,7 +694,7 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
}
try {
- _gslbProvider.applyGlobalLoadBalancerRule(zoneId.first(), zoneId.second(), gslbConfigCmd);
+ lookupGslbServiceProvider().applyGlobalLoadBalancerRule(zoneId.first(), zoneId.second(), gslbConfigCmd);
} catch (ResourceUnavailableException e) {
String msg = "Failed to configure GSLB rule in the zone " + zoneId.first() + " due to " + e.getMessage();
s_logger.warn(msg);
@@ -719,15 +720,20 @@ public class GlobalLoadBalancingRulesServiceImpl implements GlobalLoadBalancingR
private boolean checkGslbServiceEnabledInZone(long zoneId, long physicalNetworkId) {
- if (_gslbProvider == null) {
+ GslbServiceProvider gslbProvider = lookupGslbServiceProvider();
+ if (gslbProvider == null) {
throw new CloudRuntimeException("No GSLB provider is available");
}
- return _gslbProvider.isServiceEnabledInZone(zoneId, physicalNetworkId);
+ return gslbProvider.isServiceEnabledInZone(zoneId, physicalNetworkId);
+ }
+
+ protected GslbServiceProvider lookupGslbServiceProvider() {
+ return _gslbProviders.size() == 0 ? null : _gslbProviders.get(0);
}
@Override
public GlobalLoadBalancerRule findById(long gslbRuleId) {
return _gslbRuleDao.findById(gslbRuleId);
}
-}
\ No newline at end of file
+}
diff --git a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
index 504ab9cebb2..5b5dd086515 100644
--- a/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
+++ b/server/test/org/apache/cloudstack/region/gslb/GlobalLoadBalancingRulesServiceImplTest.java
@@ -726,7 +726,9 @@ public class GlobalLoadBalancingRulesServiceImplTest extends TestCase {
gslbServiceImpl._globalConfigDao = Mockito.mock(ConfigurationDao.class);
gslbServiceImpl._ipAddressDao = Mockito.mock(IPAddressDao.class);
gslbServiceImpl._agentMgr = Mockito.mock(AgentManager.class);
- gslbServiceImpl._gslbProvider = Mockito.mock(GslbServiceProvider.class);
+ List mockGslbProviders = new ArrayList();
+ mockGslbProviders.add(Mockito.mock(GslbServiceProvider.class));
+ gslbServiceImpl._gslbProviders = mockGslbProviders;
RemoveFromGlobalLoadBalancerRuleCmd removeFromGslbCmd = new RemoveFromGlobalLoadBalancerRuleCmdExtn();
Class> _class = removeFromGslbCmd.getClass().getSuperclass();